Thanks kr! I'll give it a try right now. Godfrey
On Apr 22, 11:32 pm, Keith Rarick <[email protected]> wrote: > Okay, I pushed a fix for this, using event_reinit. Now beanstalkd will > not build with libevent prior to 1.4.1. > > I apologize for not replying to any of the original messages in this > thread over a month ago. I think my spam filter (gmail) trapped them. > > kr > > > > On Tue, Apr 21, 2009 at 2:16 AM, Keith Rarick <[email protected]> wrote: > > Thanks, I'll get on this tomorrow morning. All else being equal, I > > want to do as much as possible before forking so that errors can be > > detected and reported visibly. > > > That leads me to option 2, calling event_reinit. If I can just go > > ahead and call it safely regardless of the platform I'd prefer that. > > > Otherwise, I'll try moving the fork before event_init, then moving as > > much as possible (probably just prot_replay_binlog) before the fork. > > > kr > > > On Mon, Apr 20, 2009 at 5:47 PM, Godfrey <[email protected]> wrote: > > >> I can confirm this problem is happening on my MBP running 10.5.6, and > >> yun's solution does seems to fix it. > > >> Godfrey > > >> On Mar 8, 7:57 pm, Yun Huang Yong <[email protected]> wrote: > >>> On Mar 7, 10:02 pm, Alex MacCaw <[email protected]> wrote: > > >>> > I'm doing something like this: > >>> > beanstalkd -l 0.0.0.0 -p 8002 -d > >>> > And the process just disappears! > >>> > If I don't'detachit it, it works. > > >>> > Any ideas why? > > >>> This is due to BSD's kqueue event queue not surviving across fork(). > >>> Quoting the man page (from my FreeBSD box, its the same on MacOSX): > > >>> The kqueue() system call creates a new kernel event queue and > >>> returns a > >>> descriptor. The queue is not inherited by a child created with > >>> fork(2). > >>> However, if rfork(2) is called without the RFFDG flag, then the > >>> descrip- > >>> tor table is shared, which will allow sharing of the kqueue > >>> between two > >>> processes. > > >>> There's a few solutions I can see to this: > > >>> 1. daemonize() earlier, in my own testing I moved the "if (detach) > >>> daemonize();" to just before event_init(), allowing all the beanstalkd > >>> init stuff to execute as normal. > > >>> 2. Preserve the event_base struct returned from event_init(), then > >>> call event_reinit() as suggested by Niels Provos > >>> inhttp://monkeymail.org/archives/libevent-users/2007-November/001061.html > > >>> 3. Use rfork() as suggested by the kqueue man page > > >>> The solutions get more and more BSD specific as you go down the list > >>> so Option 1. seems like the simplest solution since it keeps > >>> beanstalkd's execution path fairly identical across platforms (one of > >>> the confusing things about debugging this issue was why the "-d" fork > >>> () would affect behaviour so drastically). I don't think this has any > >>> side effects on beanstalkd... > > >>> yun --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "beanstalk-talk" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/beanstalk-talk?hl=en -~----------~----~----~----~------~----~------~--~---
