The sock functions in beanstalkd presume that a file descriptor
will remain associated with the requested events until it is
explicitly requested to be changed or removed with another call
to sockwant.

The sockwant and socknext functions should satisfy that
assumption. I don't know how to do it on Solaris, but for example
BSD's kqueue has a flag EV_ONESHOT that lets the user control
whether an association will persist.

On Mon, May 5, 2014 at 2:03 AM, Pierre Dehaen <[email protected]> wrote:
> Hi,
>
> Iin the output of make check I guess 'E' means error for one check and I
> think I found at least one issue in my SunOS.c... According to the
> port_associate() man page, after a port_get you must reassociate the object
> to the port:
> When an event for a PORT_SOURCE_FD object is retrieved, the object no longer
> has an association with the port. The event can be processed without the
> possibility that another thread can retrieve a subsequent event for the same
> object. After processing of the file descriptor is completed, the
> port_associate() function can be called to reassociate the object with the
> port.
>
> I tried a quick hack in serv.c which seems the only place where socknext()
> is used:
> x================
> *** ../beanstalkd-1.9.orig/serv.c       Sun Apr 14 19:19:41 2013
> --- serv.c      Mon May  5 10:03:44 2014
> ***************
> *** 55,60 ****
> --- 55,66 ----
>           if (rw) {
>               sock->f(sock->x, rw);
>           }
> +
> +         r = sockwant(&s->sock, 'r');
> +         if (r == -1) {
> +             twarn("sockwant(reassociate)");
> +             exit(2);
> +         }
>       }
>   }
> x================
>
> That did not solve the check issues (same result) but I think it is needed
> anyway. I'm still checking the documentation but help would be welcome...
>
> --
> You received this message because you are subscribed to the Google Groups
> "beanstalk-talk" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/beanstalk-talk.
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"beanstalk-talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/beanstalk-talk.
For more options, visit https://groups.google.com/d/optout.

Reply via email to