On 08/16/2009 04:29 PM, Daniël Mantione wrote:
I can see the issue with abnormal program exits, but I disabled it because calling it twice had unintended effects. So we need to verify we don't break anything.
Well, I can think of 2 thing that could go wrong:

- DoneKeyboard is called _after_ DoneVideo (not before) in TApplication.Done. I'm not sure if the order matters. We can switch them in the Drivers unit ExitProc also. - If DoneKeyboard blows up with a run time error, during a normal TApplication.Done call, then the ExitProc of the Drivers unit will call DoneKeyboard again, which in turn will call SysDoneKeyboard again, because the previous SysDoneKeyboard didn't finish and the KeyboardInitialized flag wasn't set to false. I don't know if this might have unintended side effects. This is all in rtl/inc/keyboard.inc:

procedure DoneKeyboard;

begin

  If KeyboardInitialized then

    begin

    If Assigned(CurrentKeyBoardDriver.DoneDriver) Then

      CurrentKeyBoardDriver.DoneDriver();

    KeyboardInitialized:=False;

    end;

end;


If that's the case, we can add a flag KeyboardInitialized in Drivers, add a check inside Drivers.DoneKeyboard and set it to false _before_ the actual call to Keyboard.DoneKeyboard.
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to