Author: cazfi
Date: Mon Sep 28 03:07:40 2015
New Revision: 29985

URL: http://svn.gna.org/viewcvs/freeciv?rev=29985&view=rev
Log:
Fixed theme double free problem from sdl-clients.

See bug #23900

Modified:
    branches/S2_5/client/gui-sdl/themes.c
    branches/S2_5/client/gui-sdl/themespec.c
    branches/S2_5/client/gui-sdl/themespec.h

Modified: branches/S2_5/client/gui-sdl/themes.c
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_5/client/gui-sdl/themes.c?rev=29985&r1=29984&r2=29985&view=diff
==============================================================================
--- branches/S2_5/client/gui-sdl/themes.c       (original)
+++ branches/S2_5/client/gui-sdl/themes.c       Mon Sep 28 03:07:40 2015
@@ -38,7 +38,8 @@
 
   /* free previous loaded theme, if any */
   theme_free(theme);
-  
+  theme = NULL;
+
   fc_snprintf(buf, sizeof(buf), "%s/%s/theme", directory, theme_name);
   
   themespec_try_read(buf);
@@ -51,6 +52,8 @@
 void gui_clear_theme(void)
 {
   theme_free(theme);
+  theme = NULL;
+
   if (!load_theme(gui_sdl_default_theme_name)) {
     /* TRANS: No full stop after the URL, could cause confusion. */
     log_fatal(_("No gui-sdl theme was found. For instructions on how to "

Modified: branches/S2_5/client/gui-sdl/themespec.c
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_5/client/gui-sdl/themespec.c?rev=29985&r1=29984&r2=29985&view=diff
==============================================================================
--- branches/S2_5/client/gui-sdl/themespec.c    (original)
+++ branches/S2_5/client/gui-sdl/themespec.c    Mon Sep 28 03:07:40 2015
@@ -150,7 +150,7 @@
   struct theme_color_system *color_system;  
 };
 
-struct theme *theme;
+struct theme *theme = NULL;
 
 
 /****************************************************************************
@@ -306,14 +306,14 @@
 /**************************************************************************
   Clean up.
 **************************************************************************/
-void theme_free(struct theme *t)
-{
-  if (t) {
-    theme_free_sprites(t);
-    theme_free_toplevel(t);
-    specfile_list_destroy(t->specfiles);
-    small_sprite_list_destroy(t->small_sprites);
-    FC_FREE(t);
+void theme_free(struct theme *ftheme)
+{
+  if (ftheme != NULL) {
+    theme_free_sprites(ftheme);
+    theme_free_toplevel(ftheme);
+    specfile_list_destroy(ftheme->specfiles);
+    small_sprite_list_destroy(ftheme->small_sprites);
+    free(ftheme);
   }
 }
 

Modified: branches/S2_5/client/gui-sdl/themespec.h
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_5/client/gui-sdl/themespec.h?rev=29985&r1=29984&r2=29985&view=diff
==============================================================================
--- branches/S2_5/client/gui-sdl/themespec.h    (original)
+++ branches/S2_5/client/gui-sdl/themespec.h    Mon Sep 28 03:07:40 2015
@@ -37,7 +37,7 @@
 const char **get_theme_list(void);
 
 struct theme *theme_read_toplevel(const char *theme_name);
-void theme_free(struct theme *theme);
+void theme_free(struct theme *ftheme);
 void theme_load_sprites(struct theme *t);
 void theme_free_sprites(struct theme *t);
 


_______________________________________________
Freeciv-commits mailing list
Freeciv-commits@gna.org
https://mail.gna.org/listinfo/freeciv-commits

Reply via email to