SDK defekt?

Ich hab ja, wie vielleicht der Eine oder Andere bereits gemerkt hat, grade Probleme mit den ToniTools.

Momentan scheint es als wenn die ToniTools instanz beim beenden nicht in die Settings geschrieben wird.

Was ich unternommen hab:

[ul]
[li]Ich hab Stück für Stück den Quellcode auskommentiert bis ich die Ursache eingrenzen konnte[/li][li]Ich habe die Zeile gefunden die das Hauptproblem auslöst[/li][li]Diese Zeile (folgt) versucht zu ersetzen oder auskommentiert - Ohne Erfolg bzw. neues Symptom[/li][li]Das SDK neu heruntergeladen - ist das, was ich auch verwende[/li][li]Das SDK (WinLirc) kompiliert - Selber Fehler wie in den ToniTools[/li][/ul]

Wie sieht der Code aus?

  
  // Sonst knallts beim shutdown
  MyID:=vKernel.InstanceManager.GetInstanceIDByName(TIPSToniTools.GetModuleName, 0);
  vKernel.LogMessage(KL_MESSAGE, MyID, LibInfo.mName, '... shutting down...');
  vKernel.InstanceManager.DeleteInstance(MyID);

  // Original aus dem SDK -> MyID ist da einfach 0
  vKernel.LogMessage(KL_MESSAGE, MyID, LibInfo.mName, 'Unregister');
  vKernel := NIL;

DeleteInstance sorgt nun dafür, dass die Instanz nicht in die Settings gespeichert wird. Gut, leuchtet ja auch ein - ging aber sonst immer.

Lasse ich die Zeile weg, so lässt sich der Dienst nicht beenden. Die Animation bleibt stehen auch wenn der Dienst im Hintergrund offenbar doch beendet wird (Info ohne Gewähr)

Gut, dacht ich mir. Machst es so wie im SDK - Selbe Situation. Der Kommentar, den ich seiner Zeit da reingebastelt hab erinnerte mich daran, dass genau darum dies DeleteInstance drin ist. Der Fehler - wenn es denn einer ist - besteht bei mir also schon seit es die IPS2 gibt. Nur das Workaround funktioniert seit neuestem nicht mehr.

IPS ist seitdem mehrfach neu installiert und geupdatet worden. Er tritt auf mehreren Rechnern auf. Neue Dualcore-Maschienen wie alte Singelcores. Ich arbeite mit meinem altbewährtem aufgebohrtem TurboDelphi. OS ist mittlerweile Vista, aber der Ur-Fehler trat unter W2k auch schon auf. Wo kann ich ansetzen?

Paresy, hilf mir… :confused:

Toni

Da mit dem DeleteInstance ist falsch. Und das Problem, dass der Shutdown nicht geht, ist das eigentlich das wir lösen wollen.

Kannst du mir dazu mehr Informationen geben? Kannst du nicht beim Beenden mit dem Debugger step-by-step durchgehen bis zu welchem Punkt er kommt? Landet er überhaupt im Destruktor?

Im IPSModuleUnregister sollte außer der LogMessage Zeile nichts sein. Alle Shutdown aktionen musst du über den MessageSink in der Instanz selber abfangen beim KR_UNINIT Signal, damit nichts ins stocken kommt und der Kernel in Ruhe die Instanz Free-en kann. Wahrscheinlich erzeugst du in dem Moment einen Deadlock und alles steht.

paresy

Also da im WinLirc Modul ausser dem DestructorPreProcess und inherited nichts drin steht, das speichern selbst aber funktioniert nehme ich mal an, dass er dort auch ankommt.

Wenn du mir verrätst wie ich die noservice Konsole zu einem „sanften“ Shutdown bewege werde ich das gern verifizieren.

Deadlock: Tja… ich hab 1:1 das WinLirc Modul aus dem SDK kompiliert. Und ohne Ablaufplan in welcher Reihenfolge welche Prozeduren gefeuert werden und wie deren Pre- und Postconditions sind kann ich nur raten.

Toni

Moment… ich bin das was ganz brandheiss auf der Spur. Bevor du da Zeit investierst ware mal noch. Ich denke ich weiss bis heut Abend ob da was dran ist. :frowning:

Wenn du mir verrätst wie ich die noservice Konsole zu einem „sanften“ Shutdown bewege werde ich das gern verifizieren.

ESC :slight_smile:

paresy

Konnt mich nicht beherrschen und habs gleich ausprobiert. Das WinLirc Modul geht wieder.

D2009 bastelt mir - nur so kann ich mir das erklären - aus nem #10#13 ein #10. Linker und Compiler vom TurboDelphi kommen damit klar. Auch der Editor der IDE findet das nicht schlimm. Aber in der DLL scheint das nen Unterschied zu machen… Gemerkt hab ichs als ich die PAS im Notepad geöffnet hab. Sah scheisse aus. Der Hex Editor hats dann ans Licht gebracht. die korrigierte Datei ist einige Bytes größer und funktioniert hervorragend.

Ich werd bekloppt. :mad: Aber ich schwör, die selbe Symptomatik hatte ich vor nem Jahr im Kernel 2.01/2.02 auch schon.

So… Nu muss ich aber erstmal Brötchen verdienen gehen…

Toni