Announcement

Collapse
No announcement yet.

system()-Aufruf in Threads -> Problem mit stack

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • system()-Aufruf in Threads -> Problem mit stack

    Hi,

    In einem C++-Programm (für Linux) möchte ich den Systemaufruf in einen Thread auslagern, da er länger dauern kann, und das Programm zwischenzeitig aber weiterhin den Watchdog füttern muss. So wie es aussieht findet der Thread nach dem Systemaufruf aber die lokalen Variablen völlig verändert, und landet mit einem Segmentation Fault auf der Nase, wenn er das Erbegnis der Basisstruktur zurückgeben möchte.

    Meine Vermutung ist nun, dass während der Thread auf die Antwort des Systems wartet, die anderen Threads fleißig weiter arbeiten und in weiteren Funktionsaufrufen den Stack manipulieren und dabei die Daten des Bereichs überschreiben, den der Thread eigentlich für sich nutzt.

    Ich dachte bisher eigentlich immer, jeder Thread hätte seinen eigenen Stack, und diese Stacks wären gegenseitig geschützt, ich kann mir aber ebensowenig vorstellen, dass das system()-Kommando da irgendetwas verschweinert.

    Ach so, der Code sieht so aus:
    [highlight=cpp]
    RemoteWorkerThread::Run()
    {
    {
    MutexWrapper mw(&(_pBase->_mutex));
    _pBase->_DataStatus="BUSY";
    }
    Debug.Print("starting Command '%s'", Command.c_str());
    size_t sysret=system(Command.c_str());
    Debug.Print("finished FTECommand '%s'",FTECommand.c_str());
    {
    MutexWrapper mw(&(_pFTAOB->_mutex));
    _pBase->_DataStatus="READY";
    _pBase->_lastSysRet=sysret;
    }
    }
    [/highlight]

    _pBase ist hierbei ein Pointer auf die Basisstruktur, die dem Thread-Objekt im Konstruktor mitgegeben wird, _DataStatus und _lastSysRet sind Member-Variablen (NICHT static) der Basisstruktur.

    Als Ausgabe erhalte ich:
    Code:
    starting Command 'export DROPBEAR_PASSWORD=xxxxxxx;ssh -y [email protected] "ls -l /opt/persistent/DiagArea/LKG_Ref.spectrum" >/tmp/filelist'
    finished FTECommand 'I^E��I^Eİ^O�j^X'
    Segmentation fault
    kann mir irgendjemand weiterhelfen?

    Gruß
    Martin
Working...
X