From a3de65d5d1861f755ced7cad291fbbd4f1b8ef51 Mon Sep 17 00:00:00 2001 From: Owen W. Taylor Date: Sat, 22 Aug 2009 15:00:57 -0400 Subject: [PATCH] Should set RestartStyleHint to RestartIfRunning when replaced This reverts most of commit abbd057eb967e6ab462ffe305f41b2b04d417b25; - It's fine to call meta_session_shutdown() after the display is closed, since it's talking over the ICE connection - We should not call warn_about_lame_clients_and_finish_interact() unless we are interacting with the window manager in a session save. However, the part of abbd057 that fixed accessing freed memory was fixing a real problem; this patches does the same thing in a simpler way by fixing an obvious type in meta_display_close() where it was NULL'ing out the local variable 'display' rather than the global variable 'the_display' and adding keeping the check in meta_finalize() that was added in abbd057. The order of calling meta_session_shutdown() and calling meta_display_close() is reverted back to the old order to make it clear that it's OK if the display way already closed previously. http://bugzilla.gnome.org/show_bug.cgi?id=588119 --- src/core/display-private.h | 2 +- src/core/display.c | 16 ++++------------ src/core/main.c | 5 ++--- src/core/session.c | 8 -------- 4 files changed, 7 insertions(+), 24 deletions(-) Index: metacity-2.30.1/src/core/display-private.h =================================================================== --- metacity-2.30.1.orig/src/core/display-private.h 2009-05-02 04:23:00.000000000 +0200 +++ metacity-2.30.1/src/core/display-private.h 2010-05-07 21:27:02.028395432 +0200 @@ -329,7 +329,7 @@ MetaScreen* meta_display_screen_for_xw void meta_display_grab (MetaDisplay *display); void meta_display_ungrab (MetaDisplay *display); -void meta_display_unmanage_screen (MetaDisplay **display, +void meta_display_unmanage_screen (MetaDisplay *display, MetaScreen *screen, guint32 timestamp); Index: metacity-2.30.1/src/core/display.c =================================================================== --- metacity-2.30.1.orig/src/core/display.c 2010-01-20 23:00:51.000000000 +0100 +++ metacity-2.30.1/src/core/display.c 2010-05-07 21:27:02.028395432 +0200 @@ -926,7 +926,7 @@ meta_display_close (MetaDisplay *display meta_compositor_destroy (display->compositor); g_free (display); - display = NULL; + the_display = NULL; meta_quit (META_EXIT_SUCCESS); } @@ -4762,13 +4762,10 @@ process_selection_clear (MetaDisplay * meta_verbose ("Got selection clear for screen %d on display %s\n", screen->number, display->name); - meta_display_unmanage_screen (&display, + meta_display_unmanage_screen (display, screen, event->xselectionclear.time); - if (!display) - the_display = NULL; - /* display and screen may both be invalid memory... */ return; @@ -4790,12 +4787,10 @@ process_selection_clear (MetaDisplay * } void -meta_display_unmanage_screen (MetaDisplay **displayp, +meta_display_unmanage_screen (MetaDisplay *display, MetaScreen *screen, guint32 timestamp) { - MetaDisplay *display = *displayp; - meta_verbose ("Unmanaging screen %d on display %s\n", screen->number, display->name); @@ -4805,10 +4800,7 @@ meta_display_unmanage_screen (MetaDispla display->screens = g_slist_remove (display->screens, screen); if (display->screens == NULL) - { - meta_display_close (display, timestamp); - *displayp = NULL; - } + meta_display_close (display, timestamp); } void Index: metacity-2.30.1/src/core/main.c =================================================================== --- metacity-2.30.1.orig/src/core/main.c 2010-01-15 01:31:32.000000000 +0100 +++ metacity-2.30.1/src/core/main.c 2010-05-07 21:27:02.032396011 +0200 @@ -362,12 +362,11 @@ static void meta_finalize (void) { MetaDisplay *display = meta_get_display(); - - meta_session_shutdown (); - if (display) meta_display_close (display, CurrentTime); /* I doubt correct timestamps matter here */ + + meta_session_shutdown (); } static int sigterm_pipe_fds[2] = { -1, -1 }; Index: metacity-2.30.1/src/core/session.c =================================================================== --- metacity-2.30.1.orig/src/core/session.c 2010-01-15 01:31:32.000000000 +0100 +++ metacity-2.30.1/src/core/session.c 2010-05-07 21:27:02.032396011 +0200 @@ -381,14 +381,6 @@ meta_session_shutdown (void) SmProp *props[1]; char hint = SmRestartIfRunning; - if (!meta_get_display ()) - { - meta_verbose ("Cannot close session because there is no display"); - return; - } - - warn_about_lame_clients_and_finish_interact (FALSE); - if (session_connection == NULL) return;