I was working on XX-8063 point (d

d-KERNEL:ERR:firstsoak.qantom.int:SipClientTcp:SipXProxy:"OsMsgQShared::doSendCore
 message send failed for queue 'SipTcpServer-3' - no room, ret = 9" 


this behaviour depend on some fact:

a) the SipTcpServer is service that don't run (start is never called on it)
b) SipClient sends a OsMsg to the SipTcpServer when it stops itself

c) the SipTcpServer is not running (nor ready to manage events on his queue)

so there are 2 possible solutions to the problem,

1) the simpler is to comment the send of OsMsg into sipclient so no such event 
will go to the queue.

2) the second is to run SipTcpServer's main loop and fix the event handling.

The decision between those 2 solutions needs to be evaluated by someone with 
more knowledge on the overall system.

I have attached here a patch[1] for the second solution.


>From 28f2b3e2158cb3118303e5dcbe845c54f1c14a26 Mon Sep 17 00:00:00 2001
From: Domenico Chierico <[email protected]>
Date: Wed, 27 Apr 2011 17:42:35 +0200
Subject: [PATCH] Fix queue problem for SipTcpServer

---
 sipXtackLib/src/net/SipTcpServer.cpp |   19 ++++++++++++++++++-
 1 files changed, 18 insertions(+), 1 deletions(-)

diff --git a/sipXtackLib/src/net/SipTcpServer.cpp b/sipXtackLib/src/net/SipTcpServer.cpp
index 2f4bc01..8b94948 100644
--- a/sipXtackLib/src/net/SipTcpServer.cpp
+++ b/sipXtackLib/src/net/SipTcpServer.cpp
@@ -105,6 +105,7 @@ UtlBoolean SipTcpServer::startListener()
        (dynamic_cast <SipServerBroker*> (iterator.value()))->start();
        bRet = TRUE;
     }
+    start();
     return bRet;
 }
 
@@ -190,9 +191,25 @@ SipTcpServer::~SipTcpServer()
 
 int SipTcpServer::run(void* runArgument)
 {
+    OsMsg*    pMsg = NULL;
+    OsStatus  res;
+
     while (!isShuttingDown())
     {
-        OsTask::delay(500); // this method really shouldn't do anything
+      res = receiveMessage((OsMsg*&) pMsg, 500);          // wait for a message
+
+      if(res == OS_SUCCESS)
+      {
+	if (!handleMessage(*pMsg))                  // process the message
+	{
+	  OsServerTask::handleMessage(*pMsg);
+	}
+
+	if (!pMsg->getSentFromISR())
+	{
+	  pMsg->releaseMsg();                         // free the message
+	}
+      }
     }
 
     return (0);
-- 
1.7.4

_______________________________________________
sipx-dev mailing list
[email protected]
List Archive: http://list.sipfoundry.org/archive/sipx-dev/

Reply via email to