Author: jtn
Date: Fri Dec 18 21:13:00 2015
New Revision: 31079

URL: http://svn.gna.org/viewcvs/freeciv?rev=31079&view=rev
Log:
Free packet handler hashes explicitly rather than via atexit().
This was causing the client to access freed memory on quitting a
single-player game.

See gna bug #24171.

Modified:
    branches/S2_6/client/client_main.c
    branches/S2_6/common/packets.c
    branches/S2_6/common/packets.h
    branches/S2_6/server/sernet.c

Modified: branches/S2_6/client/client_main.c
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_6/client/client_main.c?rev=31079&r1=31078&r2=31079&view=diff
==============================================================================
--- branches/S2_6/client/client_main.c  (original)
+++ branches/S2_6/client/client_main.c  Fri Dec 18 21:13:00 2015
@@ -230,6 +230,7 @@
 static void at_exit(void)
 {
   emergency_exit();
+  packets_deinit();
   fc_shutdown_network();
   update_queue_free();
   fc_destroy_ow_mutex();

Modified: branches/S2_6/common/packets.c
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_6/common/packets.c?rev=31079&r1=31078&r2=31079&view=diff
==============================================================================
--- branches/S2_6/common/packets.c      (original)
+++ branches/S2_6/common/packets.c      Fri Dec 18 21:13:00 2015
@@ -855,7 +855,6 @@
   /* Ensure the hash table is created. */
   if (packet_handlers == NULL) {
     packet_handlers = packet_handler_hash_new();
-    atexit(packet_handlers_free);
   }
 
   /* Lookup handlers for the capabilities or create new handlers. */
@@ -871,3 +870,12 @@
   fc_assert(phandlers != NULL);
   return phandlers;
 }
+
+/****************************************************************************
+  Call when there is no longer a requirement for protocol processing.
+  All connections must have been closed.
+****************************************************************************/
+void packets_deinit(void)
+{
+  packet_handlers_free();
+}

Modified: branches/S2_6/common/packets.h
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_6/common/packets.h?rev=31079&r1=31078&r2=31079&view=diff
==============================================================================
--- branches/S2_6/common/packets.h      (original)
+++ branches/S2_6/common/packets.h      Fri Dec 18 21:13:00 2015
@@ -117,6 +117,8 @@
 const struct packet_handlers *packet_handlers_initial(void);
 const struct packet_handlers *packet_handlers_get(const char *capability);
 
+void packets_deinit(void);
+
 #define SEND_PACKET_START(packet_type) \
   unsigned char buffer[MAX_LEN_PACKET]; \
   struct data_out dout; \

Modified: branches/S2_6/server/sernet.c
URL: 
http://svn.gna.org/viewcvs/freeciv/branches/S2_6/server/sernet.c?rev=31079&r1=31078&r2=31079&view=diff
==============================================================================
--- branches/S2_6/server/sernet.c       (original)
+++ branches/S2_6/server/sernet.c       Fri Dec 18 21:13:00 2015
@@ -276,6 +276,7 @@
   send_server_info_to_metaserver(META_GOODBYE);
   server_close_meta();
 
+  packets_deinit();
   fc_shutdown_network();
 }
 


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

Reply via email to