Ich bin nicht sicher. Aber es wäre auf jeden Fall logisch:
1) Thread: sperrt die Liste
2) Thread: Ereigniss wird aufgerufen
3) VLC: sperrt die Liste (wartet auf Freigabe durch Thread)
4) Ereigniss im Thread-Context: synchronisiert mit der
VCL
Die Frage ist, wie genau die Synchronisierung stattfindet. Wenn ich vorher von der
VCL aus die Liste sperre, wartet der
VCL Thread ja aud Freigabe durch den Thread. Synchronisiere ich jetzt im Ereigniss, wird der entsprechende Code ja im Context des
VCL Threads ausgeführt.
Interessant ist allerdings jetzt zu wissen, wie das ganze von statten geht. Wird darauf gewartet, dass der
VCL Thread irgendwie einen Context Switch durchführt, wäre das ganz klar der Grund für den Deadlock. Ist dies der Fall?
Ich frage deshalb, weil ich mal eine Funktion geschrieben hatte, die auch Code im Context eines fremden Threads ausführen kann. Dabei habe ich allerdings mit SetThreadContext() den EIP manipuliert. In diesem Falle würde der synchronisierte Code ja unabhängig vom Warten auf LockList ausgeführt, wonach dann wieder zum LockList Offset gesprungen wird.