Bogue #784
AV lors d'un ShowMessage dans le code d'un timer
Description
FunLabyrinthe crash avec un AV lorsque les conditions suivantes sont réunies :
- L'expiration d'un timer appelle une méthode d'un plugin ;
- Cette méthode appelle, directement ou indirectement, Player.WaitForKey - ex. appelle Player.ShowMessage ;
- Cette méthode continue à utiliser le paramètre Message (qui s'appelle Context dans le FunDelphi codegen) après cela.
Workaround¶
Lorsque les conditions 1 et 2 sont réunies, il faut évider de lire le paramètre Message/Context après l'appel à Player.WaitForKey. Cela peut se faire en copiant le contenu de ce message dans des variables locales si on en a encore besoin.
History
#1
Updated by sjrd about 13 years ago
Raison (interne)¶
Lorsque la coroutine quitte son code à cause de l'appel à WaitForKey, la méthode TTimerEntry.Execute qui a envoyé le message se termine. Ses variables locales (dont la variable Msg dans TNotificationMsgTimerEntry.Execute) sont du coup "libérées" de la pile. Or c'est l'adresse à cette variable Msg qui est transmise au code du plugin.
Je ne sais pas encore comment corriger ce problème proprement.
#2
Updated by sjrd about 13 years ago
- Target version set to 5.0
#3
Updated by sjrd about 13 years ago
- Target version changed from 5.0 to 5.0.1
#5
Updated by sjrd about 13 years ago
- Status changed from Nouveau to Fermé