Terminate the log with one last message.
Instead of just closing the log when everything is done, put one more message in stating that we're actually terminating. Users or scripts that look at the Xorg.log will then know that a) the server has terminated properly and b) why the server terminated (to some degree, given that most real-world errors will be caused by AbortServer()). Acked-by: Gaetan Nadon <memsize@videotron.ca> Reviewed-by: Daniel Stone <daniel@fooishbar.org> Tested-by: Jeremy Huddleston <jeremyhu@apple.com> Reviewed-by: Jeremy Huddleston <jeremyhu@apple.com> Tested-by: Jon TURNEY <jon.turney@dronecode.org.uk> Reviewed-by: Jon TURNEY <jon.turney@dronecode.org.uk> Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
01de08c7d2
commit
f51e42f583
|
@ -347,7 +347,7 @@ int main(int argc, char *argv[], char *envp[])
|
|||
|
||||
if (dispatchException & DE_TERMINATE)
|
||||
{
|
||||
ddxGiveUp();
|
||||
ddxGiveUp(EXIT_NO_ERROR);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -4680,8 +4680,8 @@ An Example implementation is miPushPixels() in Xserver/mi/mipushpxl.c.</para>
|
|||
<title>Shutdown Procedures</title>
|
||||
<para>
|
||||
<blockquote><programlisting>
|
||||
void AbortDDX()
|
||||
void ddxGiveUp()
|
||||
void AbortDDX(enum ExitCode error)
|
||||
void ddxGiveUp(enum ExitCode error)
|
||||
</programlisting></blockquote>
|
||||
Some hardware may require special work to be done before the server
|
||||
exits so that it is not left in an intermediate state. As explained
|
||||
|
|
|
@ -821,7 +821,7 @@ static void dmxSetDefaultFontPath(char *fp)
|
|||
/** This function is called in Xserver/os/utils.c from \a AbortServer().
|
||||
* We must ensure that backend and console state is restored in the
|
||||
* event the server shutdown wasn't clean. */
|
||||
void AbortDDX(void)
|
||||
void AbortDDX(enum ExitCode error)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@ -842,9 +842,9 @@ void ddxBeforeReset(void)
|
|||
/** This function is called in Xserver/dix/main.c from \a main() when
|
||||
* dispatchException & DE_TERMINATE (which is the only way to exit the
|
||||
* main loop without an interruption. */
|
||||
void ddxGiveUp(void)
|
||||
void ddxGiveUp(enum ExitCode error)
|
||||
{
|
||||
AbortDDX();
|
||||
AbortDDX(error);
|
||||
}
|
||||
|
||||
/** This function is called in Xserver/os/osinit.c from \a OsInit(). */
|
||||
|
|
|
@ -232,7 +232,7 @@ KdProcessSwitch (void)
|
|||
}
|
||||
|
||||
void
|
||||
AbortDDX(void)
|
||||
AbortDDX(enum ExitCode error)
|
||||
{
|
||||
KdDisableScreens ();
|
||||
if (kdOsFuncs)
|
||||
|
@ -249,9 +249,9 @@ AbortDDX(void)
|
|||
}
|
||||
|
||||
void
|
||||
ddxGiveUp (void)
|
||||
ddxGiveUp (enum ExitCode error)
|
||||
{
|
||||
AbortDDX ();
|
||||
AbortDDX (error);
|
||||
}
|
||||
|
||||
Bool kdDumbDriver;
|
||||
|
|
|
@ -150,7 +150,7 @@ vfbBitsPerPixel(int depth)
|
|||
}
|
||||
|
||||
void
|
||||
ddxGiveUp(void)
|
||||
ddxGiveUp(enum ExitCode error)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@ -201,9 +201,9 @@ ddxGiveUp(void)
|
|||
}
|
||||
|
||||
void
|
||||
AbortDDX(void)
|
||||
AbortDDX(enum ExitCode error)
|
||||
{
|
||||
ddxGiveUp();
|
||||
ddxGiveUp(error);
|
||||
}
|
||||
|
||||
#ifdef __APPLE__
|
||||
|
|
|
@ -749,7 +749,7 @@ DoConfigure(void)
|
|||
|
||||
bail:
|
||||
OsCleanup(TRUE);
|
||||
AbortDDX();
|
||||
AbortDDX(EXIT_ERR_CONFIGURE);
|
||||
fflush(stderr);
|
||||
exit(0);
|
||||
}
|
||||
|
|
|
@ -1198,9 +1198,9 @@ xf86LogInit(void)
|
|||
}
|
||||
|
||||
void
|
||||
xf86CloseLog(void)
|
||||
xf86CloseLog(enum ExitCode error)
|
||||
{
|
||||
LogClose();
|
||||
LogClose(error);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -902,7 +902,7 @@ OsVendorInit(void)
|
|||
*/
|
||||
|
||||
void
|
||||
ddxGiveUp(void)
|
||||
ddxGiveUp(enum ExitCode error)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@ -929,7 +929,7 @@ ddxGiveUp(void)
|
|||
if (xorgHWOpenConsole)
|
||||
xf86CloseConsole();
|
||||
|
||||
xf86CloseLog();
|
||||
xf86CloseLog(error);
|
||||
|
||||
/* If an unexpected signal was caught, dump a core for debugging */
|
||||
if (xf86Info.caughtSignal)
|
||||
|
@ -946,7 +946,7 @@ ddxGiveUp(void)
|
|||
*/
|
||||
|
||||
void
|
||||
AbortDDX(void)
|
||||
AbortDDX(enum ExitCode error)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@ -979,7 +979,7 @@ AbortDDX(void)
|
|||
* This is needed for an abnormal server exit, since the normal exit stuff
|
||||
* MUST also be performed (i.e. the vt must be left in a defined state)
|
||||
*/
|
||||
ddxGiveUp();
|
||||
ddxGiveUp(error);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -140,7 +140,7 @@ extern _X_EXPORT pmWait (*xf86PMConfirmEventToOs)(int fd,pmEvent event);
|
|||
|
||||
/* xf86Helper.c */
|
||||
extern _X_EXPORT void xf86LogInit(void);
|
||||
extern _X_EXPORT void xf86CloseLog(void);
|
||||
extern _X_EXPORT void xf86CloseLog(enum ExitCode error);
|
||||
|
||||
/* xf86Init.c */
|
||||
extern _X_EXPORT Bool xf86LoadModules(char **list, pointer *optlist);
|
||||
|
|
|
@ -124,7 +124,7 @@ void DoShowOptions (void) {
|
|||
}
|
||||
bail:
|
||||
OsCleanup (TRUE);
|
||||
AbortDDX ();
|
||||
AbortDDX (EXIT_ERR_DRIVERS);
|
||||
fflush (stderr);
|
||||
exit (0);
|
||||
}
|
||||
|
|
|
@ -114,16 +114,16 @@ CloseInput(void)
|
|||
/*
|
||||
* DDX - specific abort routine. Called by AbortServer().
|
||||
*/
|
||||
void AbortDDX(void)
|
||||
void AbortDDX(enum ExitCode error)
|
||||
{
|
||||
xnestDoFullGeneration = True;
|
||||
xnestCloseDisplay();
|
||||
}
|
||||
|
||||
/* Called by GiveUp(). */
|
||||
void ddxGiveUp(void)
|
||||
void ddxGiveUp(enum ExitCode error)
|
||||
{
|
||||
AbortDDX();
|
||||
AbortDDX(error);
|
||||
}
|
||||
|
||||
#ifdef __APPLE__
|
||||
|
|
|
@ -766,9 +766,9 @@ void ddxUseMsg( void )
|
|||
* ddxGiveUp --
|
||||
* Device dependent cleanup. Called by dix before normal server death.
|
||||
*/
|
||||
void ddxGiveUp( void )
|
||||
void ddxGiveUp( enum ExitCode error )
|
||||
{
|
||||
ErrorF( "Quitting Xquartz\n" );
|
||||
LogClose(error);
|
||||
}
|
||||
|
||||
|
||||
|
@ -779,7 +779,7 @@ void ddxGiveUp( void )
|
|||
* are closed.
|
||||
*/
|
||||
_X_NORETURN
|
||||
void AbortDDX( void ) {
|
||||
void AbortDDX( enum ExitCode error ) {
|
||||
ErrorF( " AbortDDX\n" );
|
||||
OsAbort();
|
||||
}
|
||||
|
|
|
@ -191,7 +191,7 @@ ddxBeforeReset (void)
|
|||
|
||||
/* See Porting Layer Definition - p. 57 */
|
||||
void
|
||||
ddxGiveUp (void)
|
||||
ddxGiveUp (enum ExitCode error)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@ -228,7 +228,7 @@ ddxGiveUp (void)
|
|||
g_pszLogFile = LogInit (g_pszLogFile, NULL);
|
||||
g_fLogInited = TRUE;
|
||||
}
|
||||
LogClose ();
|
||||
LogClose (error);
|
||||
|
||||
/*
|
||||
* At this point we aren't creating any new screens, so
|
||||
|
@ -258,12 +258,12 @@ ddxGiveUp (void)
|
|||
|
||||
/* See Porting Layer Definition - p. 57 */
|
||||
void
|
||||
AbortDDX (void)
|
||||
AbortDDX (enum ExitCode error)
|
||||
{
|
||||
#if CYGDEBUG
|
||||
winDebug ("AbortDDX\n");
|
||||
#endif
|
||||
ddxGiveUp ();
|
||||
ddxGiveUp (error);
|
||||
}
|
||||
|
||||
#ifdef __CYGWIN__
|
||||
|
@ -901,7 +901,7 @@ ddxUseMsg(void)
|
|||
g_pszLogFile = LogInit (g_pszLogFile, NULL);
|
||||
g_fLogInited = TRUE;
|
||||
}
|
||||
LogClose ();
|
||||
LogClose (EXIT_NO_ERROR);
|
||||
|
||||
/* Notify user where UseMsg text can be found.*/
|
||||
if (!g_fNoHelpMessageBox)
|
||||
|
|
|
@ -81,7 +81,7 @@ OsVendorFatalError (void)
|
|||
g_fLogInited = TRUE;
|
||||
g_pszLogFile = LogInit (g_pszLogFile, NULL);
|
||||
}
|
||||
LogClose ();
|
||||
LogClose (EXIT_ERR_ABORT);
|
||||
|
||||
winMessageBoxF (
|
||||
"A fatal error has occurred and " PROJECT_NAME " will now exit.\n" \
|
||||
|
|
13
include/os.h
13
include/os.h
|
@ -459,8 +459,15 @@ typedef struct {
|
|||
/* stuff for FlushCallback */
|
||||
extern _X_EXPORT CallbackListPtr FlushCallback;
|
||||
|
||||
extern _X_EXPORT void AbortDDX(void);
|
||||
extern _X_EXPORT void ddxGiveUp(void);
|
||||
enum ExitCode {
|
||||
EXIT_NO_ERROR = 0,
|
||||
EXIT_ERR_ABORT = 1,
|
||||
EXIT_ERR_CONFIGURE = 2,
|
||||
EXIT_ERR_DRIVERS = 3,
|
||||
};
|
||||
|
||||
extern _X_EXPORT void AbortDDX(enum ExitCode error);
|
||||
extern _X_EXPORT void ddxGiveUp(enum ExitCode error);
|
||||
extern _X_EXPORT int TimeSinceLastInputEvent(void);
|
||||
|
||||
/* strcasecmp.c */
|
||||
|
@ -508,7 +515,7 @@ typedef enum {
|
|||
} MessageType;
|
||||
|
||||
extern _X_EXPORT const char *LogInit(const char *fname, const char *backup);
|
||||
extern _X_EXPORT void LogClose(void);
|
||||
extern _X_EXPORT void LogClose(enum ExitCode error);
|
||||
extern _X_EXPORT Bool LogSetParameter(LogParameter param, int value);
|
||||
extern _X_EXPORT void LogVWrite(int verb, const char *f, va_list args) _X_ATTRIBUTE_PRINTF(2,0);
|
||||
extern _X_EXPORT void LogWrite(int verb, const char *f, ...) _X_ATTRIBUTE_PRINTF(2,3);
|
||||
|
|
6
os/log.c
6
os/log.c
|
@ -231,9 +231,11 @@ LogInit(const char *fname, const char *backup)
|
|||
}
|
||||
|
||||
void
|
||||
LogClose(void)
|
||||
LogClose(enum ExitCode error)
|
||||
{
|
||||
if (logFile) {
|
||||
ErrorF("Server terminated %s (%d). Closing log file.\n",
|
||||
(error == EXIT_NO_ERROR) ? "successfully" : "with error", error);
|
||||
fclose(logFile);
|
||||
logFile = NULL;
|
||||
}
|
||||
|
@ -411,7 +413,7 @@ AbortServer(void)
|
|||
CloseWellKnownConnections();
|
||||
OsCleanup(TRUE);
|
||||
CloseDownDevices();
|
||||
AbortDDX();
|
||||
AbortDDX(EXIT_ERR_ABORT);
|
||||
fflush(stderr);
|
||||
if (CoreDump)
|
||||
OsAbort();
|
||||
|
|
Loading…
Reference in New Issue