Exemplarischer Websocket-Thread:
(gdb) thread 44
[Switching to thread 44 (LWP 4979)]
#0 0x00902444 in __syscall_cp_c ()
(gdb) bt
#0 0x00902444 in __syscall_cp_c ()
#1 0x00909da8 in __timedwait_cp ()
#2 0x00909e2c in __timedwait ()
#3 0x0090369e in
pthread_mutex_timedlock_time64 ()
#4 0x0006cc84 in boost::mutex::lock() ()
#5 0x00189c1e in repetier::PrinterState::fillJSONObject(rapidjson::GenericObject<false, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::StdAllocator<char, repetier::json::RSMemoryAllocator> > >, rapidjson::StdAllocator<char, repetier::json::RSMemoryAllocator>&, bool) ()
#6 0x00039bf0 in repetier::ActionHandler::actionStateList(repetier::AccessContext&, rapidjson::GenericDocument<rapidjson::UTF8<char>, rapidjson::StdAllocator<char, repetier::json::RSMemoryAllocator>, repetier::json::RSMemoryAllocator>&, rapidjson::GenericDocument<rapidjson::UTF8<char>, rapidjson::StdAllocator<char, repetier::json::RSMemoryAllocator>, repetier::json::RSMemoryAllocator>&) ()
#7 0x00039f96 in repetier::ActionHandler::dispatch(repetier::AccessContext&, std::cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, rapidjson::GenericDocument<rapidjson::UTF8<char>, rapidjson::StdAllocator<char, repetier::json::RSMemoryAllocator>, repetier::json::RSMemoryAllocator>&, rapidjson::GenericDocument<rapidjson::UTF8<char>, rapidjson::StdAllocator<char, repetier::json::RSMemoryAllocator>, repetier::json::RSMemoryAllocator>&, repetier::LuaExtension
) ()
#8 0x00266274 in repetier::WebSocketRequestHandler::handleRequest(repetier::RequestContext&) ()
#9 0x00274244 in repetier::MainRequestHandler::handleRequest(Poco::Net::HTTPServerRequest&, Poco::Net::HTTPServerResponse&) ()
#10 0x00399b7e in Poco::Net::HTTPServerConnection::run() ()
#11 0x0038e730 in Poco::Net::TCPServerConnection::start() ()
#12 0x0038eb74 in Poco::Net::TCPServerDispatcher::run() ()
#13 0x0089f284 in Poco::PooledThread::run() ()
#14 0x00319b62 in Poco::ThreadImpl::runnableEntry(void) ()
#15 0x00902e7c in start ()
#16 0x00909f0c in __clone ()
#17 0x00909f0c in __clone ()
#18 0x00909f0c in __clone ()
#19 0x00909f0c in __clone ()
#20 0x00909f0c in __clone ()
#21 0x00909f0c in __clone ()
#22 0x00909f0c in __clone ()
#23 0x00909f0c in __clone ()
#24 0x00909f0c in __clone ()
#25 0x00909f0c in __clone ()
#26 0x00909f0c in __clone ()
#27 0x00909f0c in __clone ()
#28 0x00909f0c in __clone ()
#29 0x00909f0c in __clone ()
#30 0x00909f0c in __clone ()
#31 0x00909f0c in __clone ()
#32 0x00909f0c in __clone ()
#33 0x00909f0c in __clone ()
#34 0x00909f0c in __clone ()
#35 0x00909f0c in __clone ()
#36 0x00909f0c in __clone ()
#37 0x00909f0c in __clone ()
#38 0x00909f0c in __clone ()
#39 0x00909f0c in __clone ()
#40 0x00909f0c in __clone ()
#41 0x00909f0c in __clone ()
#42 0x00909f0c in __clone ()
#43 0x00909f0c in __clone ()
#44 0x00909f0c in __clone ()
#45 0x00909f0c in __clone ()
#46 0x00909f0c in __clone ()
#47 0x00909f0c in __clone ()
#48 0x00909f0c in __clone ()
#49 0x00909f0c in __clone ()
#50 0x00909f0c in __clone ()
Sieht für mich nach einem Deadlock aus. Die Websocket-Threads wollen wohl die Druckerliste erzeugen, aber hängen dann beim Acquirer einer Mutex fest...
Das erklärt dann auch, warum der Browser keine Antworten mehr erhählt nach dem Anfordern der Druckerliste und irgendwann eine neue Verbindung aufbaut. (Und die Anzahl der Websocket-Threads fortwährend wächst.)