mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
dtsession: don't exit while processing your own session exit event.
Setup a global that protects against accidentally exiting while doing session exit related housekeeping.
This commit is contained in:
parent
23930d1b35
commit
dc5d68afba
4 changed files with 31 additions and 6 deletions
|
@ -336,6 +336,9 @@ typedef struct
|
|||
specific display, otherwise False */
|
||||
Boolean loggingOut; /* Is True if the current save is for
|
||||
a logout; False otherwise. */
|
||||
|
||||
Boolean ExitComplete; /* JET - don't exit before we are ready... */
|
||||
|
||||
} GeneralData;
|
||||
|
||||
|
||||
|
|
|
@ -2564,12 +2564,19 @@ void
|
|||
SmExit (
|
||||
int exitStatus)
|
||||
{
|
||||
if (smXSMP.saveState.saveComplete &&
|
||||
smXSMP.saveState.shutdown &&
|
||||
!smXSMP.saveState.shutdownCanceled)
|
||||
XSMPExit ();
|
||||
|
||||
exit (exitStatus);
|
||||
/* JET - needed to rework this to avoid exiting before we are
|
||||
* *really* ready to
|
||||
*/
|
||||
if (smGD.ExitComplete)
|
||||
{
|
||||
if (smXSMP.saveState.saveComplete &&
|
||||
smXSMP.saveState.shutdown &&
|
||||
!smXSMP.saveState.shutdownCanceled)
|
||||
XSMPExit ();
|
||||
exit(exitStatus);
|
||||
}
|
||||
else
|
||||
return;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -171,6 +171,9 @@ main (int argc,
|
|||
smGD.smState = IN_PROCESS;
|
||||
smGD.programName = strdup (argv[0]);
|
||||
|
||||
/* JET - By default, we always want to leave when SmExit() is called. */
|
||||
smGD.ExitComplete = True;
|
||||
|
||||
/*
|
||||
* We report some errors before we call the DtInitialize procedure.
|
||||
* The Dt initialize procedure sets this name. If we report
|
||||
|
|
|
@ -1208,6 +1208,11 @@ ImmediateExit(
|
|||
|
||||
smGD.loggingOut = True;
|
||||
|
||||
/* JET - set this here so we don't exit prematurely (while
|
||||
* handling our own SM exit callback - duh).
|
||||
*/
|
||||
smGD.ExitComplete = False;
|
||||
|
||||
saveTimeout = False;
|
||||
timerId = XtAppAddTimeOut (smGD.appCon, smRes.saveYourselfTimeout,
|
||||
SaveTimeout, NULL);
|
||||
|
@ -1221,6 +1226,13 @@ ImmediateExit(
|
|||
XtDispatchEvent(&next);
|
||||
}
|
||||
}
|
||||
|
||||
/* JET - need this, since dtsession was exiting in the
|
||||
* XtAppNextEvent above (receiving it's own EXIT SM message) This
|
||||
* is checked in SmExit() so exit's will only occur after this
|
||||
* housekeeping has been completed.
|
||||
*/
|
||||
smGD.ExitComplete = True;
|
||||
|
||||
if (smXSMP.saveState.shutdownCanceled == False) {
|
||||
/*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue