[openamq-dev] concurrent call of amq_client_connection_new()

Martin Sustrik sustrik at imatix.com
Thu Jan 31 11:39:01 CET 2008


Jorg,

Thanks for bug report. I've queued it into our internal bug tracker. 
We'll hopefully be able to fix it soon.

Martin

Jörg Fischer wrote:
> Hi Martin,
>
> thanks for the fast reply. Here comes a piece of code that reproduces 
> the effect.
> I ran it with Visual Studio 2005 on a Win XP box. When I stop code 
> execution,
> a message box appears, telling me a deadlock occured. One thread is at 
> location
> 'free', the other at 'apr_thread_mutex_lock'. The OpenAMQ version is 1.2c4.
> If you need more informations to reproduce the deadlock, just ask.
>
> Cheers,
>
> Joerg
>
> #ifndef WINVER
> #define WINVER 0x0501
> #endif
> #include <afxwin.h>
> #include <iostream>
> #include <string>
>
> #include <base.h>
> #include <amq_client_connection.h>
>
> using namespace std;
>
> UINT run1(LPVOID)
> {
>     cout << "run 1 starting..." << endl;
>
>     icl_longstr_t* auth_data  = amq_client_connection_auth_plain 
> ("guest", "guest");
>     amq_client_connection_t* connection = 
> amq_client_connection_new("1.2.3.4:1234", "/", auth_data, "client1", 0, 
> 5000);   
>  
>     Sleep(1000);
>
>     amq_client_connection_destroy(&connection);
>     cout << "run 1 done" << endl;
>     return 0;
> }
>
> UINT run2(LPVOID)
> {
>     cout << "run 2 starting..." << endl;
>    
>     icl_longstr_t* auth_data  = amq_client_connection_auth_plain 
> ("guest", "guest");
>     amq_client_connection_t* connection = 
> amq_client_connection_new("1.2.3.4:1234", "/", auth_data, "client2", 0, 
> 5000);   
>  
>     Sleep(1000);
>
>     amq_client_connection_destroy(&connection);
>     cout << "run 2 done" << endl;
>     return 0;
> }
>
> int main (int argc, char* argv[])
> {
>     icl_system_initialise(argc, argv);
>
>     CWinThread* thread1 = AfxBeginThread(run1, 0);
>     CWinThread* thread2 = AfxBeginThread(run2, 0);
>  
>     HANDLE handles[2];
>     handles[0] = thread1->m_hThread;
>     handles[1] = thread2->m_hThread;
>
>     WaitForMultipleObjects(2, handles, TRUE, INFINITE);
>
>     icl_system_terminate ();
>
>     return 0;
> }
>
> Martin Sustrik schrieb:
>   
>> Hi,
>>
>> The thing you are doing should work ok. This looks like a bug. Do you 
>> have a simple test program to reproduce the behaviour?
>> In the meantime, as a workaround, just open the two connections 
>> consecutively.
>>
>> Thanks for reporting the problem.
>> Martin
>>   
>>     
>
> _______________________________________________
> openamq-dev mailing list
> openamq-dev at lists.openamq.org
> http://lists.openamq.org/mailman/listinfo/openamq-dev
>   



More information about the openamq-dev mailing list