bayonne-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bayonne-devel] Re: [Bayonne-dialogic] bayonne locks a line in state "st


From: infos chez fdrconseil
Subject: [Bayonne-devel] Re: [Bayonne-dialogic] bayonne locks a line in state "step"
Date: Sat, 26 Feb 2005 17:48:15 +0100
User-agent: Opera M2/7.54 (Win32, build 3865)

Hello,

We went on using our stress script and we found a mutex dead-lock in certain conditions
when starting new scripts with the command start.group.
When a line is not idle and when the start command tries to post the TRUNK_START_SCRIPT event, the postEvent function (in Dialogic and Globalcall drivers at least) stays blocked by entering a mutex already positionned
by the current task.
Moreover, after having corrected this, we noticed that when the start command does not find any free line, it
stucks without raising the error it should.

So we modified the files : trunk.cpp for Dialogic and Globacall, and script.cpp in the server directory :
        - trunk.cpp to check if the trunk is in the "idle" state
- script.cpp to raise an error if no trunk is available for starting a script

We keep having a potential problem. Since the mutexes used by Bayonne are read/write we cannot enter the mutex to test the state of the trunk (comparing the value of "handler" to the pointer "DialogicTrunk::idleHandler") because if so, we would fall again in the deadlock. Then reading this attribute (handler) we may conflict with an other thread if this one was modifying the attribute at the same time.

However, stressing bayonne with the stress script did not show any conflict, so we publish the patch.

Patch against the version 1.2.14 is following and is attached :

Comments are welcome,

FdR (*#)


diff -Naur bayonne-1.2.14/drivers/dialogic/trunk.cpp bayonne-1.2.14.after/drivers/dialogic/trunk.cpp --- bayonne-1.2.14/drivers/dialogic/trunk.cpp 2004-10-27 12:04:58.000000000 +0200 +++ bayonne-1.2.14.after/drivers/dialogic/trunk.cpp 2005-02-26 16:51:32.000000000 +0100
@@ -579,6 +579,11 @@
        bool rtn = true;
        trunkhandler_t prior;

+       if (event->id == TRUNK_START_SCRIPT) {
+               if (handler != &DialogicTrunk::idleHandler) {
+                       return false;
+               }
+       }
        enterMutex();
        switch(event->id)
        {
diff -Naur bayonne-1.2.14/drivers/globalcall/trunk.cpp bayonne-1.2.14.after/drivers/globalcall/trunk.cpp --- bayonne-1.2.14/drivers/globalcall/trunk.cpp 2005-01-26 11:43:29.000000000 +0100 +++ bayonne-1.2.14.after/drivers/globalcall/trunk.cpp 2005-02-26 16:50:55.000000000 +0100
@@ -500,6 +500,11 @@
        bool rtn = true;
        trunkhandler_t prior;

+       if (event->id == TRUNK_START_SCRIPT) {
+               if (handler != &DialogicTrunk::idleHandler) {
+                       return false;
+               }
+       }
        enterMutex();
        switch(event->id)
        {
diff -Naur bayonne-1.2.14/server/script.cpp bayonne-1.2.14.after/server/script.cpp
--- bayonne-1.2.14/server/script.cpp    2004-10-27 12:04:59.000000000 +0200
+++ bayonne-1.2.14.after/server/script.cpp 2005-02-26 16:49:05.000000000 +0100
@@ -3352,7 +3352,10 @@

        if(start)
        {
-               fifo.command(args);
+               if (!fifo.command(args)) {
+                       error("start-failed");
+                       return true;
+               }
                return rtn;
        }

Attachment: bugStartScript.diff
Description: Binary data


reply via email to

[Prev in Thread] Current Thread [Next in Thread]