Project

General

Profile

Bogue #784

AV lors d'un ShowMessage dans le code d'un timer

Added by sjrd over 11 years ago. Updated over 11 years ago.

Status:
Fermé
Priority:
Normal
Assignee:
Category:
Jeu
Target version:
Start date:
07/31/2010
Due date:
% Done:

100%

Estimated time:
5.00 h
Spent time:

Description

FunLabyrinthe crash avec un AV lorsque les conditions suivantes sont réunies :
  1. L'expiration d'un timer appelle une méthode d'un plugin ;
  2. Cette méthode appelle, directement ou indirectement, Player.WaitForKey - ex. appelle Player.ShowMessage ;
  3. 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 over 11 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 over 11 years ago

  • Target version set to 5.0

#3 Updated by sjrd over 11 years ago

  • Target version changed from 5.0 to 5.0.1

#4 Updated by sjrd over 11 years ago

  • % Done changed from 0 to 100

Corrigé dans la révision 380.

#5 Updated by sjrd over 11 years ago

  • Status changed from Nouveau to Fermé

Also available in: Atom PDF