Verzweigungen in Threads (MTProc)

Antworten
Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Verzweigungen in Threads (MTProc)

Beitrag von Targion »

Hallo!
So, ich habe den Fehler gefunden! Ich benutze den Code aus der MTProcs.pas, welche Threadmanagement etwas vereinfacht, um Elemente einer Liste asynchron zu verarbeiten. Anscheinend gibt es da Probleme, wenn ich die Methode, die den MTProcs-Threadpool verwendet aus einem anderen Thread als dem Mainthread aufrufe.
Wie kann ich das Problem umgehen?

Uhrsprünglicher Text:
:: Also, im Listaller-Projekt habe ich im Moment einen echt nervigen Bug, dessen Ursache ich nicht finden kann. Alles, was der Listaller tut ist in einer shared library gelagert. Diese wird von den diversen tools der sammlung benutzt. Z.B. kann mit der lib eine Anwendung entfernt werden.
Nun nutzt der Listaller DBus und PolicyKit, um eine Anwendung zu entfernen, die Root-Rechte braucht. Dafür wird der Befehl zum Deinstallieren von einer entsprechenden Methode in der lib über DBus an einen Daemon im Hintegrund geleitet, der dann die gleiche funktion nochmal mit Root-Rechten ausführt.
So, und genau da gibt's probleme: Der Daemon erstellt einen Thread, in dem diese Methode der lib aufgerufen wird. Blöderweise bricht der Thread manchmal einfach unfertig ab oder wirft eine EInOutError exception. (Das nur bei DBus-Daemon!)
Führe ich nun die Anwendung direkt mit Root-Rechten aus, so wird der gleiche Code aus der lib aufgerufen, nur der Umweg über den Daemon/DBus/Polkit und dessen Threads entfällt. Das funktioniert dann fehlerlos.
Kann sich jemand erklären, woran das liegt? (Es ist wirklich der gleiche code!) In den Methoden wird nichts abartiges gemacht, es wird nur mit SQLite und PackageKit und einigem anderen zeug hantiert.

Lazarus-version ist 0.9.28.2, FPC ist 2.4.0-2
::

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Verzweigungen in Threads (MTProc)

Beitrag von Scotty »

Laut Matthias sollte DoParallel aus einem worker thread heraus aufgerufen werden können. Bei meinen ersten Versuchen mit MTProcs musste ich die Klasse selbst neu erzeugen, um sinnvolle Ergebnisse zu bekommen. Das ist aber mittlerweile im SVN behoben worden. Ergo: Update?
Ansonsten verstehe ich die Frage nicht: "Fehler gefunden", " Root-Rechte" und "MTProcs aus Mainthread" kann ich nicht miteinander verbinden 8)

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Verzweigungen in Threads (MTProc)

Beitrag von Targion »

Okay, sobald ich wieder an 'nem Rechner mit Lazarus sitze, probiere ich das aus. Die letzte revision von MTProcs ist aber 6 Monate alt, deshalb glaube ich, dass ich die aktuellste Version besitze.
Scotty hat geschrieben:Laut Matthias sollte DoParallel aus einem worker thread heraus aufgerufen werden können. Bei meinen ersten Versuchen mit MTProcs musste ich die Klasse selbst neu erzeugen, um sinnvolle Ergebnisse zu bekommen. Das ist aber mittlerweile im SVN behoben worden. Ergo: Update?

Das verstehe ich nicht ganz. Bei mir sieht das in etwa so aus:
Daemon erstellt TThread-Klasse, die In Execute ein Kommando in einer externen Lib aufruft, welche intern MTProcs verwendet, um eine Liste zu bearbeiten.
Und das funktioniert nicht richtig.
Ansonsten verstehe ich die Frage nicht: "Fehler gefunden", " Root-Rechte" und "MTProcs aus Mainthread" kann ich nicht miteinander verbinden 8)

Das Projekt ist mittlerweile sehr komplex geworden, tritt ein Fehler auf ist es manchmal schwer, das Modul zu finden wo der Fehler war. (Seit neuestem bekomme ich auch keine sinnvollen Debuginfos mehr)
Mir Superuser-Rechten hat das Problem nichts zu tun, als Mainthread bezeichne ich den Thread, in dem die Anwendung läuft.

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Verzweigungen in Threads (MTProc)

Beitrag von Scotty »

MTProcs ist aber 6 Monate alt, deshalb glaube ich, dass ich die aktuellste Version besitze.
Revision 1176, sollte noch keine 6 Monate alt sein. Ich hatte vorher das Problem, dass die Ergebnisse bei einer wiederholten Verarbeitung nicht mehr stimmen. Irgendwo gibt es hier auch einen Thread dazu und auch einen Bugreport. Ich konnte das Problem umgehen, indem ich eine lokale Variable bei jedem Aufruf selbst erzeugt habe.

Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Verzweigungen in Threads (MTProc)

Beitrag von Targion »

Revision 1176? Ich habe meine MTProcs aus den Lazarus-CCR-Quellen (von hier) und da ist die letzte Änderung 6 Monate alt.
Woher hast du denn deine version?

Scotty
Beiträge: 768
Registriert: Mo 4. Mai 2009, 13:24
OS, Lazarus, FPC: Arch Linux, Lazarus 1.3 r44426M FPC 2.6.4
CPU-Target: x86_64-linux-qt/gtk2
Kontaktdaten:

Re: Verzweigungen in Threads (MTProc)

Beitrag von Scotty »


Targion
Beiträge: 688
Registriert: Mi 3. Okt 2007, 21:00
OS, Lazarus, FPC: Linux (L 0.9.29 FPC 2.4.2)
CPU-Target: x86_64

Re: Verzweigungen in Threads (MTProc)

Beitrag von Targion »

Die version war leider mit meiner identisch... Ich probiere hier noch ein wenig rum.

Antworten