Seite 2 von 2
Re: GoScintilla crashed unter 5.6
Verfasst: 07.09.2017 11:52
von Kiffi
ich bin mir da nicht ganz sicher. Die GOSCI_Free() sieht so aus:
Code: Alles auswählen
Procedure GOSCI_Free(id)
Protected *this._GoScintilla
If IsGadget(id) And GadgetType(id) = #PB_GadgetType_Scintilla
*this = GetGadgetData(id)
If *this
ClearStructure(*this, _GoScintilla)
FreeMemory(*this)
EndIf
FreeGadget(id)
EndIf
EndProcedure
Es ist allerdings so, dass das FreeGadget(id) nochmal den Callback auslöst und dieser dann crasht, weil *this nicht mehr gültig ist.
Grüße ... Peter
Re: GoScintilla crashed unter 5.6
Verfasst: 07.09.2017 12:34
von GPI
hmm... klingt so, als würde im Callback eine Routine sitzen, die das freigeben des Gadgets bemerkt und wiederum versucht den Speicher zuzugreifen, der schon von gosci_Free() freigegeben wurde. Den Callback mal anzuschauen (Wurde ja schon öfters genannt) ist sicherlich nicht verkehrt, besonders der Teil, der auf ein #WM_Close oder ähnliches reagiert.
Re: GoScintilla crashed unter 5.6
Verfasst: 07.09.2017 18:24
von Sicro
Die Änderung von Kiffi löst das Problem anscheinend.
srod001 hat mit einer sehr ähnlichen Anpassung ebenfalls keine Probleme mehr:
https://github.com/tajmone/purebasic-ar ... -327764678
Re: GoScintilla crashed unter 5.6
Verfasst: 07.09.2017 19:59
von GPI
Sicro hat geschrieben:Die Änderung von Kiffi löst das Problem anscheinend.
Das ist halt immer so eine Sache. Ich mag es, wenn ich weis, warum was funktioniert. Von daher wäre es für mich unerlässlich, den Callback mal anzuschauen. Weil wenn man pech hat, beseitigt man nur die Symptome, aber nicht die "Krankheit". mit dem Ergebnis, das irgenwann einen alles um die Ohren fliegt, und man nicht weis wieso.
Re: GoScintilla crashed unter 5.6
Verfasst: 09.09.2017 12:30
von Sicro
Das stimmt. Wenn man die Lösung anzweifelt, sollte man auf jeden Fall nochmal selber über den Code schauen, bevor man ihn in seinen eigenen Code integriert.