<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.2900.3243" name=GENERATOR></HEAD>
<BODY>
<DIV><BR><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; ACE VERSION: 
5.5.6</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; HOST MACHINE and OPERATING 
SYSTEM: i386, Linux 2.6.20-1.2933.fc6 </FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; TARGET MACHINE and OPERATING 
SYSTEM, if different from HOST:<SPAN class=426535114-26022008> 
same.</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=426535114-26022008></SPAN><BR>&nbsp;&nbsp;&nbsp; COMPILER NAME AND VERSION 
(AND PATCHLEVEL): gcc 4.1.1</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; CONTENTS OF 
$ACE_ROOT/ace/config.h:&nbsp; config-linux.h</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; CONTENTS OF 
$ACE_ROOT/include/makeinclude/platform_macros.GNU (unless<BR>&nbsp;&nbsp;&nbsp; 
this isn't used in this case, e.g., with Microsoft Visual 
C++):<BR>&nbsp;&nbsp;&nbsp;&nbsp; platform-linux.GNU<BR>&nbsp;&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;&nbsp; AREA/CLASS/EXAMPLE AFFECTED: <BR>&nbsp;&nbsp;&nbsp; 
Message_Queue_T.cpp / ACE_Message_Queue&lt;ACE_SYNCH_USE&gt; / 
enqueue_prio<BR>&nbsp;&nbsp;&nbsp; ( But I think 
also:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ::enqueue_head, 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
::enqueue_deadline,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ::enqueue_tail 
)</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; See 
DESCRIPTION.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; DOES THE PROBLEM 
AFFECT:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; COMPILATION? 
NO<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
LINKING?&nbsp;&nbsp;&nbsp;&nbsp; 
NO<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXECUTION?&nbsp;&nbsp; 
YES<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OTHER (please specify)? 
NO</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; SYNOPSIS:<BR>&nbsp;&nbsp;&nbsp; 
Application sometimes hangs when main Reactor gets more busy. 
<BR>&nbsp;&nbsp;&nbsp; (e.g. due to significant increasing external 
events)<BR>&nbsp;&nbsp;&nbsp; Coredump shows:<BR>&nbsp;&nbsp;&nbsp; 1) Main 
Reactor thread is blocking to get the ACE_Message_Queue 
lock.<BR>&nbsp;&nbsp;&nbsp; 2) Multiple threads block on 
ACE_Select_Reactor_Notify-&gt; which ends up 
in<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -&gt;ACE::send() -&gt; 
write().<BR>&nbsp;&nbsp;&nbsp; Result is deadlock. We have to kill the 
application for shutdown.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; I've read Sidebar17 of C++ 
Network Programming Volume 2 but our situation <BR>&nbsp;&nbsp;&nbsp; is 
different from what is stated there (no notify called from handle_* 
of<BR>&nbsp;&nbsp;&nbsp; event_handler<SPAN class=426535114-26022008> but 
producer-consumer deadlock</SPAN>).</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><BR><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; DESCRIPTION:</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; The application in 
short.<BR>&nbsp;&nbsp;&nbsp; -------------------------<BR>&nbsp;&nbsp;&nbsp; The 
part of our program where this deadlock appears is dealing with 
<BR>&nbsp;&nbsp;&nbsp; processing messages from an embedded (CAN) network. 
<BR>&nbsp;&nbsp;&nbsp; There is a thread per CAN message center (hardware 
communication channel)<BR>&nbsp;&nbsp;&nbsp; which puts the received message 
into ACE_Message_Queue's, depending on who<BR>&nbsp;&nbsp;&nbsp; wants to 
observe the messages. These are the producer threads.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; The message queues belongs to 
observers who all have registered to get<BR>&nbsp;&nbsp;&nbsp; notified by one 
Reactor which runs in one main Reactor thread (consumer).<BR>&nbsp;&nbsp;&nbsp; 
(they also have registered themselves by the message center threads as 
being<BR>&nbsp;&nbsp;&nbsp;&nbsp; interested in the messages).</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; Problem 
cause<BR>&nbsp;&nbsp;&nbsp; --------------<BR>&nbsp;&nbsp;&nbsp; What can happen 
now is that the main Reactor, which is used for many other 
<BR>&nbsp;&nbsp;&nbsp; things in our application, temporarily got other work 
todo, and therefore<BR>&nbsp;&nbsp;&nbsp; the message center threads may fill up 
the ACE_Select_Reactor notification<BR>&nbsp;&nbsp;&nbsp; PIPE. This causes the 
message center threads (producers) to block on the <BR>&nbsp;&nbsp;&nbsp; (FULL) 
PIPE write().</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; The main Reactor thread 
(consumer), when ready with the other work, wants to <BR>&nbsp;&nbsp;&nbsp; 
proceed with handling the pending notifications, and so emptying the PIPE, 
<BR>&nbsp;&nbsp;&nbsp; but cannot do this because the current notification code 
also holds the <BR>&nbsp;&nbsp;&nbsp; message QUEUE lock! <BR>&nbsp;&nbsp; 
<BR>&nbsp;&nbsp;&nbsp; See code description below:</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><BR><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; In 
Message_Queue_T.cpp<BR>&nbsp;&nbsp;&nbsp; 
======================<BR>&nbsp;&nbsp;&nbsp; 
ACE_Message_Queue&lt;ACE_SYNCH_USE&gt;::enqueue_prio,<BR>&nbsp;&nbsp;&nbsp; ( 
But also the code reveals:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
::enqueue_head, <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
::enqueue_deadline,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ::enqueue_tail 
)</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>-------------------------------<BR>DEADLOCK CODE: 
(Above rev. 46096 until HEAD code)</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>template &lt;ACE_SYNCH_DECL&gt; 
int<BR>ACE_Message_Queue&lt;ACE_SYNCH_USE&gt;::enqueue_prio (ACE_Message_Block 
*new_item,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
ACE_Time_Value *timeout)<BR>{<BR>&nbsp; ACE_TRACE 
("ACE_Message_Queue&lt;ACE_SYNCH_USE&gt;::enqueue_prio");<BR>&nbsp; int 
queue_count = 0;<BR>&nbsp; {<BR>&nbsp;&nbsp;&nbsp; ACE_GUARD_RETURN 
(ACE_SYNCH_MUTEX_T, ace_mon, this-&gt;lock_, -1);</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; if (this-&gt;state_ == 
ACE_Message_Queue_Base::DEACTIVATED)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; errno = 
ESHUTDOWN;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 
-1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; if (this-&gt;wait_not_full_cond 
(ace_mon, timeout) == -1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 
-1;</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; queue_count = this-&gt;enqueue_i 
(new_item);</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; if (queue_count == 
-1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; this-&gt;notify ();&nbsp; 
&lt;&lt;&lt;&lt; ERROR DEADLOCK (When blocking on notify in scope of 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
buffer lock...)<BR>&nbsp; }<BR>&nbsp; return queue_count;<BR>}</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><BR><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; In above code snippet: 
<BR>&nbsp;&nbsp;&nbsp; this-&gt;notify (); Causes DEADLOCK when blocking on full 
notification pipe.<BR>&nbsp;&nbsp;&nbsp; This happens because &lt;notify()&gt; 
is now called within the scope of the <BR>&nbsp;&nbsp;&nbsp; 
ACE_GUARD_RETURN.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; In older versions of ACE, e.g. 
5.3.1, the &lt;notify()&gt; was outside the scope<BR>&nbsp;&nbsp;&nbsp; of the 
GUARD and we never had this deadlock.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; In SUBVERSION ACE, I can see 
this has been changed after revision<BR>&nbsp;&nbsp;&nbsp;&nbsp; r.46096 of 
Message_Queue_T.cpp (ChangeLogTag:Sat Mar 22 11:58:12 
2003)<BR>&nbsp;&nbsp;&nbsp; But I don't know why.</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; See Message_Queue_T.cpp 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : enqueue_prio, enqueue_head, 
enqueue_deadline, enqueue_tail</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>-------------------------------<BR>NON DEADLOCK 
CODE (rev. 46096)<BR>&nbsp;&nbsp;&nbsp; 
...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 
...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; 
if (queue_count == -1)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return -1;</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp; }&nbsp; // e.o. scope ACE_GUARD_RETURN for 
queue lock.<BR>&nbsp; this-&gt;notify ();&nbsp; // NO deadlock here, notify will 
unblock as soon PIPE is 
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
// emptied.<BR>&nbsp; return queue_count;<BR>}</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><BR><FONT face=Arial size=2>-------------------------------<BR>Concerning 
Coredump parts:</FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=426535114-26022008></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=426535114-26022008>[ consumer 
]</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2>Thread 1 (process 16785):<BR>#0&nbsp; 0x009bc5d9 in 
__lll_mutex_lock_wait () from /lib/libpthread.so.0<BR>#1&nbsp; 0x009b8636 in 
_L_mutex_lock_85 () from /lib/libpthread.so.0<BR>#2&nbsp; 0x009b817d in 
pthread_mutex_lock () from /lib/libpthread.so.0<BR>#3&nbsp; 0x00a9f922 in 
ACE_OS::mutex_lock () from /usr/lib/libACE.so.5.5.6<BR>#4&nbsp; 0x00fd83c8 in 
ACE_Message_Queue&lt;ACE_MT_SYNCH&gt;::is_empty ()<BR>&nbsp;&nbsp; from 
/opt/lib/libgcp_datadump.so<BR>#5&nbsp; 0x0142d881 in 
can::CCanSvcDriverObserver::handle_output ()<BR>&nbsp;&nbsp; from 
/opt/lib/libcanResourceManager.so.2<BR>#6&nbsp; 0x00ac03f6 in 
ACE_Select_Reactor_Notify::dispatch_notify ()<BR>&nbsp;&nbsp; from 
/usr/lib/libACE.so.5.5.6<BR>#7&nbsp; 0x00ac057a in 
ACE_Select_Reactor_Notify::handle_input ()<BR>&nbsp;&nbsp; from 
/usr/lib/libACE.so.5.5.6<BR>#8&nbsp; 0x00ac14da in 
ACE_Select_Reactor_Notify::dispatch_notifications ()<BR>&nbsp;&nbsp; from 
/usr/lib/libACE.so.5.5.6<BR>#9&nbsp; 0x00a5ef8e in 
ACE_Asynch_Pseudo_Task::ACE_Asynch_Pseudo_Task$base ()<BR>&nbsp;&nbsp; from 
/usr/lib/libACE.so.5.5.6<BR>#10 0x00a5f5fd in 
ACE_Asynch_Pseudo_Task::ACE_Asynch_Pseudo_Task$base ()<BR>&nbsp;&nbsp; from 
/usr/lib/libACE.so.5.5.6<BR>#11 0x00a65b03 in ACE_OS::gettimeofday () from 
/usr/lib/libACE.so.5.5.6<BR>#12 0x00abd0d3 in 
ACE_Reactor::run_reactor_event_loop ()<BR>&nbsp;&nbsp; from 
/usr/lib/libACE.so.5.5.6<BR>#13 0x0804ae36 in main ()</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2></FONT><BR><FONT face=Arial size=2>
<DIV><FONT face=Arial size=2><SPAN class=426535114-26022008>[&nbsp;producer 
]</SPAN></FONT></DIV>Thread 28 (process 17023):<BR>#0&nbsp; 0x009bc8f1 in write 
() from /lib/libpthread.so.0<BR>#1&nbsp; 0x00a55a3a in ACE::send () from 
/usr/lib/libACE.so.5.5.6<BR>#2&nbsp; 0x00ac082e in 
ACE_Select_Reactor_Notify::notify ()<BR>&nbsp;&nbsp; from 
/usr/lib/libACE.so.5.5.6<BR>#3&nbsp; 0x00a5edcc in 
ACE_Asynch_Pseudo_Task::ACE_Asynch_Pseudo_Task$base ()<BR>&nbsp;&nbsp; from 
/usr/lib/libACE.so.5.5.6<BR>#4&nbsp; 0x00abdce6 in ACE_Reactor::notify () from 
/usr/lib/libACE.so.5.5.6<BR>#5&nbsp; 0x00abeace in 
ACE_Reactor_Notification_Strategy::notify ()<BR>&nbsp;&nbsp; from 
/usr/lib/libACE.so.5.5.6<BR>#6&nbsp; 0x0804b42a in 
ACE_Message_Queue&lt;ACE_MT_SYNCH&gt;::notify ()<BR>#7&nbsp; 0x00fd7fa2 in 
ACE_Message_Queue&lt;ACE_MT_SYNCH&gt;::enqueue_prio ()<BR>&nbsp;&nbsp; from 
/opt/lib/libgcp_datadump.so<BR>#8&nbsp; 0x0142d6f3 in 
can::CCanSvcDriverObserver::update ()<BR>&nbsp;&nbsp; from 
/opt/lib/libcanResourceManager.so.2<BR>#9&nbsp; 0x0143078d in 
can::CCanSvcDriver_Base::svc_Read ()<BR>&nbsp;&nbsp; from 
/opt/lib/libcanResourceManager.so.2<BR>#10 0x0143087f in 
can::CCanSvcDriverRemoteRequestImpl::svc ()<BR>&nbsp;&nbsp; from 
/opt/lib/libcanResourceManager.so.2<BR>#11 0x00ad3026 in ACE_Task_Base::svc_run 
() from /usr/lib/libACE.so.5.5.6<BR>#12 0x00ad39e8 in 
ACE_Thread_Adapter::invoke_i ()<BR>&nbsp;&nbsp; from 
/usr/lib/libACE.so.5.5.6<BR>#13 0x00ad3bb6 in ACE_Thread_Adapter::invoke () from 
/usr/lib/libACE.so.5.5.6<BR>#14 0x00a67511 in ace_thread_adapter () from 
/usr/lib/libACE.so.5.5.6<BR>#15 0x009b626a in start_thread () from 
/lib/libpthread.so.0<BR>#16 0x92fff470 in ?? ()<BR>#17 0x92fff470 in ?? 
()<BR>#18 0x92fff470 in ?? ()<BR>#19 0x92fff470 in ?? ()<BR>#20 0x00000000 in ?? 
()</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>
<DIV><FONT face=Arial size=2><SPAN class=426535114-26022008>[&nbsp;producer 
]</SPAN></FONT></DIV>Thread 34 (process 17012):<BR>#0&nbsp; 0x009bc8f1 in write 
() from /lib/libpthread.so.0<BR>#1&nbsp; 0x00a55a3a in ACE::send () from 
/usr/lib/libACE.so.5.5.6<BR>#2&nbsp; 0x00ac082e in 
ACE_Select_Reactor_Notify::notify ()<BR>&nbsp;&nbsp; from 
/usr/lib/libACE.so.5.5.6<BR>#3&nbsp; 0x00a5edcc in 
ACE_Asynch_Pseudo_Task::ACE_Asynch_Pseudo_Task$base ()<BR>&nbsp;&nbsp; from 
/usr/lib/libACE.so.5.5.6<BR>#4&nbsp; 0x00abdce6 in ACE_Reactor::notify () from 
/usr/lib/libACE.so.5.5.6<BR>#5&nbsp; 0x00abeace in 
ACE_Reactor_Notification_Strategy::notify ()<BR>&nbsp;&nbsp; from 
/usr/lib/libACE.so.5.5.6<BR>#6&nbsp; 0x0804b42a in 
ACE_Message_Queue&lt;ACE_MT_SYNCH&gt;::notify ()<BR>#7&nbsp; 0x00fd7fa2 in 
ACE_Message_Queue&lt;ACE_MT_SYNCH&gt;::enqueue_prio ()<BR>&nbsp;&nbsp; from 
/opt/lib/libgcp_datadump.so<BR>#8&nbsp; 0x0142d6f3 in 
can::CCanSvcDriverObserver::update ()<BR>&nbsp;&nbsp; from 
/opt/lib/libcanResourceManager.so.2<BR>#9&nbsp; 0x0143062b in 
can::CCanSvcDriver_Base::svc_Read ()<BR>&nbsp;&nbsp; from 
/opt/lib/libcanResourceManager.so.2<BR>#10 0x014308cd in 
can::CCanSvcDriverReadImpl::svc ()<BR>&nbsp;&nbsp; from 
/opt/lib/libcanResourceManager.so.2<BR>#11 0x00ad3026 in ACE_Task_Base::svc_run 
() from /usr/lib/libACE.so.5.5.6<BR>#12 0x00ad39e8 in 
ACE_Thread_Adapter::invoke_i ()<BR>&nbsp;&nbsp; from 
/usr/lib/libACE.so.5.5.6<BR>#13 0x00ad3bb6 in ACE_Thread_Adapter::invoke () from 
/usr/lib/libACE.so.5.5.6<BR>#14 0x00a67511 in ace_thread_adapter () from 
/usr/lib/libACE.so.5.5.6<BR>#15 0x009b626a in start_thread () from 
/lib/libpthread.so.0<BR>#16 0x96bff470 in ?? ()<BR>#17 0x96bff470 in ?? 
()<BR>#18 0x96bff470 in ?? ()<BR>#19 0x96bff470 in ?? ()<BR>#20 0x00000000 in ?? 
()</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>
<DIV><FONT face=Arial size=2><SPAN class=426535114-26022008>[&nbsp;producer 
]</SPAN></FONT></DIV>Thread 26 (process 17025):<BR>#0&nbsp; 0x009bc8f1 in write 
() from /lib/libpthread.so.0<BR>#1&nbsp; 0x00a55a3a in ACE::send () from 
/usr/lib/libACE.so.5.5.6<BR>#2&nbsp; 0x00ac082e in 
ACE_Select_Reactor_Notify::notify ()<BR>&nbsp;&nbsp; from 
/usr/lib/libACE.so.5.5.6<BR>#3&nbsp; 0x00a5edcc in 
ACE_Asynch_Pseudo_Task::ACE_Asynch_Pseudo_Task$base ()<BR>&nbsp;&nbsp; from 
/usr/lib/libACE.so.5.5.6<BR>#4&nbsp; 0x00abdce6 in ACE_Reactor::notify () from 
/usr/lib/libACE.so.5.5.6<BR>#5&nbsp; 0x00abeace in 
ACE_Reactor_Notification_Strategy::notify ()<BR>&nbsp;&nbsp; from 
/usr/lib/libACE.so.5.5.6<BR>#6&nbsp; 0x0804b42a in 
ACE_Message_Queue&lt;ACE_MT_SYNCH&gt;::notify ()<BR>#7&nbsp; 0x00fd7fa2 in 
ACE_Message_Queue&lt;ACE_MT_SYNCH&gt;::enqueue_prio ()<BR>&nbsp;&nbsp; from 
/opt/lib/libgcp_datadump.so<BR>#8&nbsp; 0x0142d6f3 in 
can::CCanSvcDriverObserver::update ()<BR>&nbsp;&nbsp; from 
/opt/lib/libcanResourceManager.so.2<BR>#9&nbsp; 0x0143078d in 
can::CCanSvcDriver_Base::svc_Read ()<BR>&nbsp;&nbsp; from 
/opt/lib/libcanResourceManager.so.2<BR>#10 0x0143087f in 
can::CCanSvcDriverRemoteRequestImpl::svc ()<BR>&nbsp;&nbsp; from 
/opt/lib/libcanResourceManager.so.2<BR>#11 0x00ad3026 in ACE_Task_Base::svc_run 
() from /usr/lib/libACE.so.5.5.6<BR>#12 0x00ad39e8 in 
ACE_Thread_Adapter::invoke_i ()<BR>&nbsp;&nbsp; from 
/usr/lib/libACE.so.5.5.6<BR>#13 0x00ad3bb6 in ACE_Thread_Adapter::invoke () from 
/usr/lib/libACE.so.5.5.6<BR>#14 0x00a67511 in ace_thread_adapter () from 
/usr/lib/libACE.so.5.5.6<BR>#15 0x009b626a in start_thread () from 
/lib/libpthread.so.0<BR>#16 0x91bff470 in ?? ()<BR>#17 0x91bff470 in ?? 
()<BR>#18 0x91bff470 in ?? ()<BR>#19 0x91bff470 in ?? ()<BR>#20 0x00000000 in ?? 
()</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><BR><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; REPEAT 
BY:<BR>&nbsp;&nbsp;&nbsp; See description</FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2>&nbsp;&nbsp;&nbsp; SAMPLE 
FIX/WORKAROUND:<BR>&nbsp;&nbsp;&nbsp; Change ACE code so that 
&lt;this-&gt;notify();&gt; is outside of GUARD scope<SPAN 
class=426535114-26022008>?</SPAN><BR>&nbsp;&nbsp;&nbsp; (like it was before<SPAN 
class=426535114-26022008> in rev. 46096</SPAN>).<BR></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV><FONT><SPAN class=426535114-26022008><FONT face=Arial 
size=2></FONT></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=426535114-26022008>[* end of PRF 
*]</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN 
class=426535114-26022008></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT><SPAN class=426535114-26022008><FONT face=Arial 
size=2></FONT></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Arial size=2><SPAN class=426535114-26022008>Aside from this 
deadlock problem:</SPAN></FONT></DIV>
<DIV><FONT><SPAN class=426535114-26022008>
<DIV><SPAN class=426535114-26022008><FONT face=Arial size=2>One thing what also 
comes up now is that I have to look at the notification pipe</FONT></SPAN></DIV>
<DIV><SPAN class=426535114-26022008><FONT face=Arial size=2>buffer length too 
when I want&nbsp;to increase the&nbsp;</FONT></SPAN><SPAN 
class=426535114-26022008><FONT face=Arial size=2> ACE_Message_Queue 
size?</FONT></SPAN></DIV>
<DIV><FONT face=Arial size=2><SPAN class=426535114-26022008>(enqueue will block 
if notification pipe is full). </SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=426535114-26022008>Or,&nbsp;I have to 
use #define ACE_HAS_REACTOR_NOTIFICATION_QUEUE and</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=426535114-26022008>recompile 
ACE?</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT>&nbsp;</DIV>
<DIV></SPAN></FONT><FONT><SPAN class=426535114-26022008><FONT face=Arial 
size=2>Best regards,</FONT></SPAN></FONT></DIV></DIV>
<DIV><FONT><SPAN class=426535114-26022008><FONT face=Arial 
size=2></FONT></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT><SPAN class=426535114-26022008>
<DIV align=left><SPAN class=904435009-11112005><FONT face=Arial 
size=2></FONT></SPAN>&nbsp;</DIV>
<DIV><SPAN class=904435009-11112005><SPAN class=904435009-11112005><SPAN 
class=904435009-11112005><SPAN class=904435009-11112005><STRONG><FONT 
face=Arial><FONT size=2><SPAN 
class=426535114-26022008>Rudy</SPAN>&nbsp;Pot</FONT></FONT></STRONG></SPAN></DIV>
<DIV>
<DIV>
<DIV>
<DIV>
<DIV align=left>
<DIV><SPAN class=904435009-11112005><FONT face=Arial size=2>Embedded Computer 
Systems</FONT></SPAN></DIV>
<DIV><SPAN class=904435009-11112005><FONT face=Arial 
size=2></FONT></SPAN>&nbsp;</DIV>
<DIV><SPAN class=904435009-11112005><FONT face=Arial size=2><STRONG>AWETA 
G&amp;P b.v</STRONG></FONT></SPAN></DIV>
<DIV><SPAN class=904435009-11112005>
<DIV><FONT face=Arial size=2><SPAN class=203213811-11042007>Postbox 
17</SPAN></FONT></DIV>
<DIV><FONT face=Arial size=2><SPAN class=203213811-11042007>NL-2630 AA&nbsp; 
Nootdorp</SPAN></FONT></DIV></SPAN></DIV>
<DIV><SPAN class=904435009-11112005>
<DIV><SPAN class=904435009-11112005><FONT face=Arial size=2>tel +31 (0)15 
3109961 </FONT>
<DIV><SPAN class=904435009-11112005><FONT face=Arial size=2>fax&nbsp;+31 (0)15 
310<SPAN class=904435009-11112005>7321</SPAN> </FONT>
<DIV><SPAN class=904435009-11112005><FONT face=Arial size=2>mail&nbsp;</FONT><A 
href="mailto:rpot@aweta.nl"><FONT face=Arial 
size=2>rpot@aweta.nl</FONT></A></SPAN></DIV>
<DIV>
<DIV><FONT face=Arial><FONT size=2>w<SPAN class=248343315-01122005>eb <A 
href="blocked::http://www.aweta.com">www.aweta.com</A></SPAN></FONT></FONT></DIV></SPAN></SPAN></SPAN></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></DIV></SPAN></SPAN></SPAN></SPAN></DIV></FONT></BODY></HTML>