[
https://issues.apache.org/jira/browse/QPID-2367?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12805963#action_12805963
]
Andrew Stitcher commented on QPID-2367:
---------------------------------------
I think the fix most in line with the current code would be to use a singleton
pattern.
However when you add all the possibilities of forking into the mix of how this
code is used I wonder if this would catch all the cases.
For instance what about a process that uses amqp then forks a daemon and then
uses amqp in the forked daemon? Is that a meaningful scenario? If it is you'd
run into the same issue again. Which implies that although it appears wasteful
a class member might be needed.
> 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:[email protected]