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
[email protected]
https://mail.gna.org/listinfo/freeciv-commits