[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
RE: [Bayonne-devel] Leaving a conference when one is not entered in
From: |
Julien Chavanton |
Subject: |
RE: [Bayonne-devel] Leaving a conference when one is not entered in |
Date: |
Mon, 11 Apr 2005 15:08:23 -0400 |
Hi,
The description of the bug was not correct.
I did revert to the code I have made for conference and at the end I encounter
the same problem.
It seem that after hangup we must avoid using certain function call or obect
instantiation, because sometime it fail with a segfault, not sure if it is the
instantiation of "Line" or the "getscript()" function but the problem is there:
bool Trunk::scrConf()
{
slog(Slog::levelDebug) << "CONF:scrConf1"<<endl;
TrunkEvent event;
Trunk *trk;
char *name = NULL;
slog(Slog::levelDebug) << "CONF:scrConf2"<<endl;
//(This is where the segfault take place sometime)
// Analyze the arguments
Line *line = getScript();
slog(Slog::levelDebug) << "CONF:scrConf2.1"<<endl;
for (unsigned int argc = 0 ; argc < line->argc ; argc++)
{
if (!strcmp(line->args[argc], "=name"))
{
// Name of the conference
name = line->args[++argc];
if (name[0] == '%')
{
name = getContent(name);
}
if (strlen(name) > 255)
{
name[255] = 0;
}
}
}
slog(Slog::levelDebug) << "CONF:scrConf3"<<endl;
strncpy(data.conf.name, name, 255);
slog(Slog::levelDebug) << "CONF:scrConf4"<<endl;
slog(Slog::levelDebug) << "Conference Name:"<< data.conf.name <<endl;
trunkStep(TRUNK_STEP_CONF);
return true;
}
What I did is create another command for exiting conference that can safely be
used after hangup "confexit" .
bool Trunk::scrConfexit()
{
slog(Slog::levelDebug) << "CONF:scrConf1"<<endl;
TrunkEvent event;
Trunk *trk;
char *name = NULL;
slog(Slog::levelDebug) << "CONF:scrConf2"<<endl;
trunkStep(TRUNK_STEP_CONF);
return true;
}
-----Original Message-----
From: infos chez fdrconseil [mailto:address@hidden
Sent: April 4, 2005 12:31 PM
To: Julien Chavanton
Subject: Re: [Bayonne-devel] Leaving a conference when one is not entered in
Le Fri, 18 Mar 2005 11:08:41 -0500, Julien Chavanton
<address@hidden> a écrit:
> Etoile,
>
> The problem is a bit more complex then I was thinking:
> But it takes place only under certain circumstance when a
> conference.leave is called before a conference.enter.
>
> I am going to add a protection in the code, a "status variable" that
> will automatically return from conference.leave if conference.enter was
> not called before.
>
> Mar 18 08:33:34 bayonne: dx(147): GCEV TDX_PLAY HDL:302 chdev:303
> Mar 18 08:33:34 bayonne: dx(147): step 3 gosub(conf)
> Mar 18 08:33:34 bayonne: dx(147): step 3 cleardigits()
> Mar 18 08:33:35 bayonne: dx(147): GCEV_DISCONNECTED HDL:302
> Mar 18 08:33:35 bayonne: dx(147): step 2
> conference.leave(=name,%confname)
> Mar 18 08:33:35 bayonne: trace: pid=186551 reason=11
> Mar 18 08:33:35 bayonne: trace(0):
> /usr/local/lib/bayonne/1.2.13/bayonne.bin(stackTrace__Q23ost5Debugi+0x20)
> [0x8079604]
>
>
> I see your validation was stronger then I was thinking but still there
> is something somewhere, I am testing this under heavy stress so maybe
> this problem did not take place on your servers.
>
> Many thanks,
>
> Julien
>
I confirm that the problem does not occur on our server.
We also have some circumstances where some one who has NOT entered yet in
a conference
is hanging up and then is leaving the conference : it does not cause any
trouble.
Nevertheless, we have slightly modified the conference code to manage the
conference
ressources in a better way : we are using a 60 ressources card (DCB/640SC)
and when a new conference has to be created, the device which is choosen
(dcbB1D1 or dcbB1D2) is the one
which has the SMALLEST number of ressources occupied. When creating a new
conference, based
on the number of conferees attributed on each board, it chooses the less
busy.
This is important because the maximum of conferee on a board is 30.
This new version of dcb.cpp is available at
http://www.etoilediese.com/bayonne/dcb.cpp
It can be used with dialogic or globalcall driver.
Cheers,
FdR/ED