[
https://issues.apache.org/jira/browse/QPID-3256?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13060625#comment-13060625
]
[email protected] commented on QPID-3256:
-----------------------------------------------------
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/987/#review965
-----------------------------------------------------------
Ship it!
Cliff,
Thanks for your effort on this.
Without this patch test cases would deadlock under NUnit probably the same as
under Excel.
With the patch the test cases exit and NUnit is happy.
-Chuck
- Chug
On 2011-07-05 17:54:17, Cliff Jansen wrote:
bq.
bq. -----------------------------------------------------------
bq. This is an automatically generated e-mail. To reply, visit:
bq. https://reviews.apache.org/r/987/
bq. -----------------------------------------------------------
bq.
bq. (Updated 2011-07-05 17:54:17)
bq.
bq.
bq. Review request for qpid.
bq.
bq.
bq. Summary
bq. -------
bq.
bq. This is the same logic as the preceding version with naming fixes and
refinements to DLL cleanup.
bq.
bq. Cleanup now uses Windows DllMain function to allows cleanup after C++
runtime static destructors.
bq.
bq.
bq. This addresses bug qpid-3256.
bq. https://issues.apache.org/jira/browse/qpid-3256
bq.
bq.
bq. Diffs
bq. -----
bq.
bq. /trunk/qpid/cpp/src/qpid/sys/windows/Thread.cpp 1143151
bq.
bq. Diff: https://reviews.apache.org/r/987/diff
bq.
bq.
bq. Testing
bq. -------
bq.
bq. Qpid cmake run_tests
bq.
bq.
bq. Thanks,
bq.
bq. Cliff
bq.
bq.
> Application which uses Qpid (in my case Excel) hangs on shutdown
> ----------------------------------------------------------------
>
> Key: QPID-3256
> URL: https://issues.apache.org/jira/browse/QPID-3256
> Project: Qpid
> Issue Type: Bug
> Components: C++ Client
> Affects Versions: 0.8, 0.10
> Environment: OS: Windows.
> Qpid is assembled as DLL.
> Reporter: Eugene
> Assignee: Cliff Jansen
> Fix For: 0.11
>
> Attachments: qpid-3256-3.patch, qpid-3256.patch
>
>
> Hi All
> I encountered with strange behavior on shutdown when using qpid 0-8 and 0-10.
> When I use qpid in standalone console-application everything is ok. But when
> I use qpid in DLL which is loaded into Excel (as RTD module), Excel hangs on
> shutdown.
> I found out that in standalone application on shutdown I have next stack:
> qpidclientd.dll!qpid::client::`anonymous
> namespace'::IOThread::~IOThread() Line 138 C++
> qpidclientd.dll!`qpid::client::`anonymous
> namespace'::theIO'::`2'::`dynamic atexit destructor for 'io''() + 0xd bytes
> C++
> qpidclientd.dll!_CRT_INIT(void * hDllHandle=0x60080000, unsigned long
> dwReason=0, void * lpreserved=0x00000001) Line 449 C
> qpidclientd.dll!__DllMainCRTStartup(void * hDllHandle=0x60080000,
> unsigned long dwReason=0, void * lpreserved=0x00000001) Line 560 + 0x11
> bytes C
> qpidclientd.dll!_DllMainCRTStartup(void * hDllHandle=0x60080000,
> unsigned long dwReason=0, void * lpreserved=0x00000001) Line 510 + 0x11
> bytes C
> ntdll.dll!77b79960()
> [Frames below may be incorrect and/or missing, no symbols loaded for
> ntdll.dll]
> ntdll.dll!77b9a516()
> ntdll.dll!77b9a3b8()
> kernel32.dll!77657363()
> msvcr90d.dll!__crtExitProcess(int status=0) Line 732 C
> msvcr90d.dll!doexit(int code=0, int quick=0, int retcaller=0) Line 644
> + 0x9 bytes C
> msvcr90d.dll!exit(int code=0) Line 412 + 0xd bytes C
> Test.exe!__tmainCRTStartup() Line 599 C
> Test.exe!mainCRTStartup() Line 403 C
> kernel32.dll!77653677()
> ntdll.dll!77b79f02()
> ntdll.dll!77b79ed5()
> And in this state all threads of application have been already terminated.
> The only thread is:
> 1 > 21720 Main Thread Main Thread
> qpid::client::`anonymous namespace'::IOThread::~IOThread Normal 0
> so code from file ConnectionImpl.cpp works well:
> ~IOThread() {
> std::vector<Thread> threads;
> {
> ScopedLock<Mutex> l(threadLock);
> if (poller_)
> poller_->shutdown();
> t.swap(threads);
> }
> for (std::vector<Thread>::iterator i = threads.begin(); i !=
> threads.end(); ++i) {
> i->join();
> }
> }
> BUT in Excel I get stack:
> qpidclientd.dll!qpid::client::`anonymous namespace'::IOThread::~IOThread()
> Line 130 C++
> qpidclientd.dll!`qpid::client::`anonymous
> namespace'::theIO'::`2'::`dynamic atexit destructor for 'io''() + 0xd bytes
> C++
> qpidclientd.dll!_CRT_INIT(void * hDllHandle=0x07700000, unsigned long
> dwReason=0, void * lpreserved=0x00000000) Line 449 C
> qpidclientd.dll!__DllMainCRTStartup(void * hDllHandle=0x07700000,
> unsigned long dwReason=0, void * lpreserved=0x00000000) Line 560 + 0x11
> bytes C
> qpidclientd.dll!_DllMainCRTStartup(void * hDllHandle=0x07700000,
> unsigned long dwReason=0, void * lpreserved=0x00000000) Line 510 + 0x11
> bytes C
> ntdll.dll!77b79960()
> [Frames below may be incorrect and/or missing, no symbols loaded for
> ntdll.dll]
> ntdll.dll!77ba1525()
> ntdll.dll!77b81231()
> KernelBase.dll!77281da7()
> ole32.dll!75bb9562()
> ole32.dll!75bb9593()
> ole32.dll!75bb95a7()
> ole32.dll!75bb98bf()
> ole32.dll!75bb9805()
> ole32.dll!75bb9a8c()
> EXCEL.EXE!2f3811e9()
> EXCEL.EXE!2f6933e8()
> EXCEL.EXE!2f32a5af()
> EXCEL.EXE!2f34894a()
> EXCEL.EXE!2f670001()
> MSO.DLL!65bc6ed5()
> MSO.DLL!65c26a34()
> MSO.DLL!65c30305()
> MSO.DLL!65bc910c()
> MSO.DLL!65c4f420()
> MSO.DLL!65bbf161()
> comctl32.dll!7233463d()
> user32.dll!762971be()
> user32.dll!76297d31()
> user32.dll!76297dfa()
> EXCEL.EXE!2f324572()
> EXCEL.EXE!2f324534()
> EXCEL.EXE!2f324441()
> MSO.DLL!65b78116()
> MSO.DLL!65ba1fd0()
> EXCEL.EXE!2f30424b()
> msvcr90.dll!749936c5()
> msvcr90.dll!749938b3()
> msvcr90.dll!749938c5()
> msvcr90.dll!749ac40c()
> msvcr90.dll!749b028d()
> msvcr90.dll!749b04f3()
> EXCEL.EXE!2f303f0a()
> kernel32.dll!77653677()
> ntdll.dll!77b79f02()
> ntdll.dll!77b79ed5()
> And threads:
> 0 24016 Worker Thread _threadstartex _threadstartex Normal > 0
> 0 > 22928 Main Thread Main Thread
> qpid::client::`anonymous namespace'::IOThread::~IOThread Normal 0
> 0 20224 RPC Thread RPC Callback Thread 77b5fd21
> Normal 0
> 0 16492 Worker Thread Win32 Thread 77b61ed6 Normal > 0
> 0 19948 Worker Thread Win32 Thread 77b600ed Normal > 0
> 0 20524 Worker Thread Win32 Thread 77b61ed6 Normal > 0
> 0 20532 Worker Thread Win32 Thread 77b5f861 Normal > 0
> 0 21500 Worker Thread Win32 Thread 77b5f861 Normal > 0
> 0 21848 Worker Thread Win32 Thread 77b61ed6 Normal > 0
> 0 22152 Worker Thread Win32 Thread 77b5f861 Normal > 0
> 0 22164 Worker Thread Win32 Thread 77b5f8e9 Normal > 0
> 0 22300 Worker Thread Win32 Thread 77b5f861 Normal > 0
> 0 22360 Worker Thread Win32 Thread 77b61ed6 Normal > 0
> 0 23316 Worker Thread Win32 Thread 77b5f861 Normal > 0
> 0 23556 Worker Thread Win32 Thread 77b5f8e9 Normal > 0
> 0 23700 Worker Thread Win32 Thread 77b5f861 Normal > 0
> 0 23912 Worker Thread Win32 Thread 77b5f8e9 Normal > 0
> 0 24276 Worker Thread Win32 Thread 77b5f861 Normal > 0
> 0 24308 Worker Thread Win32 Thread 77b5f861 Normal > 0
> 0 24424 Worker Thread Win32 Thread 77b600ed Normal > 0
> 0 24452 Worker Thread Win32 Thread 77b5f8e9 Normal > 0
> 0 24520 Worker Thread Win32 Thread 77b61ed6 Normal > 0
> As result this code (below) hangs application(Excel):
> ~IOThread() {
> std::vector<Thread> threads;
> {
> ScopedLock<Mutex> l(threadLock);
> if (poller_)
> poller_->shutdown();
> t.swap(threads);
> }
> for (std::vector<Thread>::iterator i = threads.begin(); i !=
> threads.end(); ++i)
> {
> i->join();-- APPLICATION HANGS HERE !!!!
> }
> }
> I suppose it occurs because of qpid tries to wait of thread completing from
> _DllMainCRTStartup which is called with PROCESS_DETACH.
> To work around it I modified function IOThread::sub():
> void sub() {
> std::vector<Thread> threads;
> {
> ScopedLock<Mutex> l(threadLock);
> --connections;
>
> if (connections == 0){
> if (poller_){
> poller_->shutdown();
> poller_.reset();
> t.swap(threads);
> }
> }
> }
> for (std::vector<Thread>::iterator i = threads.begin(); i !=
> threads.end(); ++i) {
> i->join();
> }
> }
> But I don't think it is a good solution.
> Could you help me to solve this problem?
> Thanks
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:[email protected]