Dear Colleagues!
Periodically I see in Yate's log following errors:
----------------------------------------------------
20170621143618.000069 <engine:MILD> Creating new message dispatching thread (4 running)
20170621143618.749978 <engine:WARN> Engine is congested: Call endpoint mutex busy
20170621143620.000069 <engine:MILD> Creating new message dispatching thread (5 running)
20170621143622.000079 <engine:MILD> Creating new message dispatching thread (6 running)
Supervisor: child 10193 died on signal 6
Yate (10247) is starting Wed Jun 21 14:36:25 2017
...
Mentioned core dump lines:
----------------------------------------------------
Thread 1 (Thread 0x7f2f47db6700 (LWP 10168)):
#0 0x00007f2f5b56e125 in raise () from /lib/x86_64-linux-gnu/libc.so.6
#1 0x00007f2f5b5713a0 in abort () from /lib/x86_64-linux-gnu/libc.so.6
#2 0x00007f2f5c0cb3fb in TelEngine::Debug(int, char const*, ...) () from /usr/lib/libyate.so.5.5.1
#3 0x00007f2f5c0ce148 in TelEngine::MutexPrivate::lock(long) () from /usr/lib/libyate.so.5.5.1
#4 0x00007f2f5aee19a0 in Lock (maxwait=-1, lck=0x7f2f5b11d7a0, this=<synthetic pointer>) at ../yateclass.h:5363
#5 complete (msg=..., this=0x7f2f48104c30, minimal=<optimized out>) at ysipchan.cpp:7376
#6 (anonymous namespace)::YateSIPConnection::complete (this=0x7f2f48104c30, msg=..., minimal=false) at ysipchan.cpp:7371
#7 0x00007f2f5c109ad6 in TelEngine::Channel::message(char const*, bool, bool) () from /usr/lib/libyate.so.5.5.1
#8 0x00007f2f5c109b3d in TelEngine::Channel::connected(char const*) () from /usr/lib/libyate.so.5.5.1
#9 0x00007f2f5c106f24 in TelEngine::CallEndpoint::connect(TelEngine::CallEndpoint*, char const*, bool) () from /usr/lib/libyate.so.5.5.1
#10 0x00007f2f5876cc88 in (anonymous namespace)::ForkModule::msgExecute (msg=..., this=<error reading variable: Unhandled dwarf expression opcode 0xfa>) at callfork.cpp:782
#11 0x00007f2f5876e7c8 in (anonymous namespace)::ForkModule::received (this=0x7f2f589709e0, msg=..., id=256) at callfork.cpp:854
#12 0x00007f2f5c0f50df in TelEngine::MessageDispatcher::dispatch(TelEngine::Message&) () from /usr/lib/libyate.so.5.5.1
#13 0x00007f2f5c107cb6 in TelEngine::Router::route() () from /usr/lib/libyate.so.5.5.1
#14 0x00007f2f5c10b89b in TelEngine::Router::run() () from /usr/lib/libyate.so.5.5.1
#15 0x00007f2f5c0cfc05 in TelEngine::ThreadPrivate::run() () from /usr/lib/libyate.so.5.5.1
#16 0x00007f2f5c0cfc49 in TelEngine::ThreadPrivate::startFunc(void*) () from /usr/lib/libyate.so.5.5.1
#17 0x00007f2f5c3e9b50 in start_thread () from /lib/x86_64-linux-gnu/libpthread.so.0
#18 0x00007f2f5b619fbd in clone () from /lib/x86_64-linux-gnu/libc.so.6
#19 0x0000000000000000 in ?? ()
And probably here is part of problem code:
------------------------------------------------------
bool ForkModule::msgExecute(Message& msg)
{
CallEndpoint* ch = YOBJECT(CallEndpoint,msg.userData());
if (!ch)
return false;
String dest(msg.getParam("callto"));
if (!dest.startSkip(MOD_PREFIX))
return false;
ObjList* targets = 0;
if (dest)
targets = dest.split(' ',false);
else {
for (int n = 1; true; n++) {
String prefix;
prefix << "callto." << n;
NamedString* ns = msg.getParam(prefix);
if (!ns)
break;
if (TelEngine::null(ns))
continue;
// Set target parameters from enclosed list
// Override/add new params from message sub-params
NamedPointer* np = YOBJECT(NamedPointer,ns);
NamedList* target = YOBJECT(NamedList,np);
if (target) {
np->takeData();
target->assign(*ns);
}
else
target = new NamedList(*ns);
target->copySubParams(msg,prefix + ".");
if (!targets)
targets = new ObjList;
targets->append(target);
// Clear from initial message
msg.clearParam(prefix,'.');
}
}
if (!(targets && targets->skipNull())) {
msg.setParam("error","failure");
TelEngine::destruct(targets);
return false;
}
CallEndpoint::commonMutex().lock();
ForkMaster* master = new ForkMaster(targets);
bool ok = master->connect(ch,msg.getValue("reason")) && master->startCalling(msg); // <------------------- line 782
CallEndpoint::commonMutex().unlock();
master->deref();
return ok;
}
Best regards!