On 2009-09-10, Michael Burk <bur...@gmail.com> wrote:
> We have been working for a couple weeks with the Amanda developers to get
> their latest release working on OpenBSD 4.5. Amanda stopped working with
> OpenBSD somewhere around version 2.5.1 (3 years ago). We've been focusing on
> a failure in the dump process on the client.

Does newer Amanda use threads? With pthread, stdio will be silently changed
to _non_ blocking.


>
> On the client side, dump(8) is started with its output to a blocking pipe.
> However, dump fails with EAGAIN, which we understand should be impossible.
> One of the developers outlined the basic process as follows:
>
> In amandad process:
>  pipe(pipefd)
>  dup2(pipefd[1],b)
>  fork
>  in the child:
>     exec sendbackup process
>     dup2(b,c)
>     write c #fail with EAGAIN
>
> We added some debug messages to verify that the pipe was blocking. In so
> doing, we discovered that the debug messages "fixed" the problem, and the
> dump succeeded. Narrowing this down, we found the absolute minimal patch was
> simply inserting the following line before the dup2 above:
>      fcntl(datafd, F_GETFL, 0);
>
> This adds to the mystery; why would doing a call that simply returns a flag
> change the behavior of the program? Is there some side effect of this call?
>
> We have tried this on several machines (at least the sparc64, amd64
> platforms), all running 4.5. dump is invoked as follows:
>     /sbin/dump dump 0usf 1048576 - /dev/rsd0a
>
> I don't know what other details might be helpful; let me know and I'll send
> them.
>
> Thank you for any insight.
>
> -- Michael

Reply via email to