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