[ https://issues.apache.org/jira/browse/QPID-2367?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12805967#action_12805967 ]
Andrew Stitcher commented on QPID-2367: --------------------------------------- Obviously, as I imply in my first comment, there is a simple work around, which is not to close all the fds before forking to daemonise. I think that you really only need to close 0,1,2 when daemonising anyway (just to make sure you don't have a stdin,stdout,stderr) and reopen them as /dev/null. More important is creating a new processs group so you don't get terminal signals. When we daemonise qpidd we only close 0,1,2 and reopen as /dev/null and call setsid(). That I believe is minimally required, anything else is not. > Early Initialization of File Descriptors Conflicts With Daemon Best Practices > ----------------------------------------------------------------------------- > > Key: QPID-2367 > URL: https://issues.apache.org/jira/browse/QPID-2367 > Project: Qpid > Issue Type: Improvement > Components: C++ Client > Affects Versions: 0.5 > Environment: Linux (possibly all UNIX), c++, g++ > Reporter: Jason Schlauch > > At least one file descriptor (in qpid/sys/epoll/EpollPoller.*) in the c++ > client is global and declared as static. In programs linked against the c++ > qpid libs g++ generates code for allocation and, more importantly, > initialization of these descriptors that occurs before main(). You can > confirm this with gdb by breakpointing both the initialization and main() > (the initialization break is hit first). > On the other hand, the canonical recipe for creating a UNIX daemon calls for > the closing of all open file descriptors after fork()ing (where the fork() > certainly occurs after main()). While not an absolute requirement, closing > all open file descriptors is considered a best practice. A loop to close all > descriptors is also common in boilerplate daemon creation code and has > undoubtedly been cut-and-pasted into numerous daemons. > The net effect is that the typical daemon will close the file descriptor > opened before main() in the c++ client library. In the case of the epoll > code this manifests as an inability to connect to the broker. > A fix for this would be to defer the initialization of the file descriptor > (perhaps via the Singleton pattern or a move of the variables into a class > member). -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- Apache Qpid - AMQP Messaging Implementation Project: http://qpid.apache.org Use/Interact: mailto:dev-subscr...@qpid.apache.org