corrupted double-linked list error after closing main window
-
so i get a very long error starting with
corrupted double-linked list: 0x0000000002081a70 *** ======= Backtrace: ========= /lib/x86_64-linux-gnu/libc.so.6(+0x777f5)[0x7fdae30987f5] /lib/x86_64-linux-gnu/libc.so.6(+0x7e6fd)[0x7fdae309f6fd] /lib/x86_64-linux-gnu/libc.so.6(+0x80688)[0x7fdae30a1688]
after closing the main window what i am trying to do is choose a json file and parse it extract data from it
the data is extracted correctly but closing the mainwindow causes the app to crash
this is how i kill the qprocessesvoid plugin::terminate_kill(){ QProcess::execute("kill", QStringList()<< "-9" << QString::number(getpid())); }
this is how i run them and track if they finished then stop them
void Sessions::Run(QString type){ for(auto it:Plugins){ //std::cout<<(*it)<<std::endl; if(it->gettype()==type) it->run(); } emit(start_cpu_gpu(false)); } void Sessions::recievefinishedid(int id){ std::cout<<"plugin number "<<id<<" has finished"<<std::endl; add_finished(); Plugins[id]->terminate_kill(); if(get_finished()==get_existing()){ stop_servers(); } } void Sessions::stop_servers(){ for(auto it:Plugins){ if(it->gettype()=="server"){ it->terminate_kill(); std::cout<<it->getname().toStdString()<<' '<<"stopped"<<std::endl; } } emit(plugins_finished(false)); }
and this is how i start it
void plugin::run(){ //plugin_process.start("/bin/bash",QStringList()<<getfilename()<<" -v3 -j "<<getjsonfilename()); plugin_process.start("/bin/bash",QStringList() << "-c" <<getfilename()); if(plugin_process.pid()){ QString nstart=getname()+" started"; std::cout<<getname().toStdString()<<" started"<<std::endl; setpid(plugin_process.pid()); QObject::connect(&plugin_process , SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(processFinished(int, QProcess::ExitStatus))); QObject::connect(&plugin_process , SIGNAL(started()), this, SLOT(processStarted())); QObject::connect(&plugin_process , SIGNAL(readyReadStandardOutput()), this, SLOT(processStandardOutput())); } else{ std::cout<<"failed to start "<<getname().toStdString()<<std::endl; } }
-
@Dijkstra
Some things show up when main window closed/program exited, e.g. double-deletion of objects.I do not see you using a "double-linked list". As ever with a crash, same every time, run in debugger. When it crashes debugger should break, look at stack trace window, trace back to your own code to see where it came from.
BTW, in
terminate_kill()
youkill
the pid fromgetpid()
. Whichgetpid()
is this? If it's Linux's::getpid()
you are killing yourself.... -
@JonB ran in debugger and this was the output after the error
RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget' RTTI symbol not found for class 'QWidget'
-
@Dijkstra said in corrupted double-linked list error after closing main window:
no its a getter to get the qprocess pid
That's OK then.
do u mean this ?
Not the top window, because that window is entitled Disassembler. But yes for the window underneath that. But you have stopped at the bottom-most 11 calls --- which btw does indeed show your problem is inside some
free()
, exactly as I suspected (trying to free something bad/already freed, during some "font destroy"). You need to keep scrolling down that pane, till we can see where in your code it came from. (I'm not sure, but you may be able to "copy as text" (right-click?) and paste here, instead of screenshots.) -
@Dijkstra
So it's failing while destructing someQString
, which in turn is happening while destructingMainWindow
. Please, like I have said several times, move the "current frame" into your code. There's no point being shown it has died inqdataarray.h
, we need to see what line in your code is the cause, and then figure out what you have done wrong about it. Maybe you can even break in the main window destructor so we can see whichQString
(content) it is trying to destruct. I'll look at it again if/when you show the needed information..... -
@Dijkstra said in corrupted double-linked list error after closing main window:
and now the table changes for no reason
No comment.
Do you do anything with fonts in your app? All the errors seem to have something to do with that. Can't say more from the information you show.
-
@JonB after trying to debugg i found that the problem occurs when i parse the json file and this is the function
void Sessions::parsejsonfile(QString inputFileName){ QJsonParseError jsonError; QFile file; file.setFileName(inputFileName); bool open=file.open(QIODevice::ReadOnly | QIODevice::Text); if(open){ QString file_values=file.readAll(); file.close(); QJsonDocument parsejson = QJsonDocument::fromJson(file_values.toUtf8(),&jsonError); if (QJsonParseError::NoError != jsonError.error) { std::cout<<"error parsing json file"<<std::endl; } else{ QJsonObject jsonobject = parsejson.object(); QJsonValue plugin_file_name=jsonobject.value(QString("file")); QJsonValue jsonfile=jsonobject.value(QString("JSON_File")); QJsonValue name=jsonobject.value(QString("name")); QJsonValue number_instances=jsonobject.value(QString("number_instants")); plugin *Plugin=new plugin(); Plugin->setfilename(plugin_file_name.toString()); Plugin->setjsonfilename(jsonfile.toString()); Plugin->setname(name.toString()); Plugin->setnumber_instances(number_instances.toString().toInt()); Plugin->settype(QString("plugin")); Plugin->setid(0); QObject::connect(Plugin, SIGNAL(sendfinishedid(int)), this, SLOT(recievefinishedid(int))); QObject::connect(Plugin, SIGNAL(LogMessage(QString)), this, SLOT(logMessage(QString))); Plugins.push_back(Plugin); add_existing(); QJsonValue gpu_servers_configurations=jsonobject.value(QString("gpu_servers_configurations")); QJsonArray array=gpu_servers_configurations.toArray(); int idx=1; foreach(const QJsonValue &it,array){ plugin *server=new plugin(); server->setname(it.toObject().value(QString("name")).toString()); server->setjsonfilename(it.toObject().value(QString("JSON_File")).toString()); server->setfilename(it.toObject().value(QString("path")).toString()); server->setnumber_instances(it.toObject().value(QString("number_instants")).toString().toInt()); server->settype(QString("server")); server->setid(idx); Plugins.push_back(server); idx++; } } } else{ std::cout<<"failed to open file"<<std::endl; } }
when i fire this function only after choosing the file and closing the error occurs when i remove it no probhlems happen