aboutsummaryrefslogtreecommitdiff
path: root/src/util
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2017-02-21 10:41:53 +0100
committerChristian Grothoff <christian@grothoff.org>2017-02-21 10:41:53 +0100
commitaad47a3092ff6139902c28d84d4e53453ade6343 (patch)
treeba568dbb1c9acc64ecda3a0fcbdeef797b09d8da /src/util
parentc1d325e4700772b36fdaf897295c05e9d3f9211c (diff)
downloadgnunet-aad47a3092ff6139902c28d84d4e53453ade6343.tar.gz
gnunet-aad47a3092ff6139902c28d84d4e53453ade6343.zip
prevent crash on exit
Diffstat (limited to 'src/util')
-rw-r--r--src/util/service_new.c28
1 files changed, 4 insertions, 24 deletions
diff --git a/src/util/service_new.c b/src/util/service_new.c
index 8d654c0cb..1b3254cca 100644
--- a/src/util/service_new.c
+++ b/src/util/service_new.c
@@ -1624,17 +1624,7 @@ GNUNET_SERVICE_starT (const char *service_name,
1624 sh->connect_cb = connect_cb; 1624 sh->connect_cb = connect_cb;
1625 sh->disconnect_cb = disconnect_cb; 1625 sh->disconnect_cb = disconnect_cb;
1626 sh->cb_cls = cls; 1626 sh->cb_cls = cls;
1627 if (NULL != handlers) 1627 sh->handlers = GNUNET_MQ_copy_handlers (handlers);
1628 {
1629 unsigned int i;
1630
1631 for (i=0;NULL != handlers[i].cb; i++) ;
1632 sh->handlers = GNUNET_new_array (i + 1,
1633 struct GNUNET_MQ_MessageHandler);
1634 GNUNET_memcpy (sh->handlers,
1635 handlers,
1636 i * sizeof (struct GNUNET_MQ_MessageHandler));
1637 }
1638 if (GNUNET_OK != setup_service (sh)) 1628 if (GNUNET_OK != setup_service (sh))
1639 { 1629 {
1640 GNUNET_free (sh->handlers); 1630 GNUNET_free (sh->handlers);
@@ -1660,7 +1650,7 @@ GNUNET_SERVICE_stoP (struct GNUNET_SERVICE_Handle *srv)
1660 while (NULL != (client = srv->clients_head)) 1650 while (NULL != (client = srv->clients_head))
1661 GNUNET_SERVICE_client_drop (client); 1651 GNUNET_SERVICE_client_drop (client);
1662 teardown_service (srv); 1652 teardown_service (srv);
1663 GNUNET_free (srv->handlers); 1653 GNUNET_free_non_null (srv->handlers);
1664 GNUNET_free (srv); 1654 GNUNET_free (srv);
1665} 1655}
1666 1656
@@ -1762,17 +1752,7 @@ GNUNET_SERVICE_ruN_ (int argc,
1762 sh.connect_cb = connect_cb; 1752 sh.connect_cb = connect_cb;
1763 sh.disconnect_cb = disconnect_cb; 1753 sh.disconnect_cb = disconnect_cb;
1764 sh.cb_cls = cls; 1754 sh.cb_cls = cls;
1765 if (NULL != handlers) 1755 sh.handlers = GNUNET_MQ_copy_handlers (handlers);
1766 {
1767 unsigned int i;
1768
1769 for (i=0;NULL != handlers[i].cb; i++) ;
1770 sh.handlers = GNUNET_new_array (i + 1,
1771 struct GNUNET_MQ_MessageHandler);
1772 GNUNET_memcpy (sh.handlers,
1773 handlers,
1774 i * sizeof (struct GNUNET_MQ_MessageHandler));
1775 }
1776 sh.service_name = service_name; 1756 sh.service_name = service_name;
1777 1757
1778 /* setup subsystems */ 1758 /* setup subsystems */
@@ -1903,7 +1883,7 @@ shutdown:
1903 } 1883 }
1904#endif 1884#endif
1905 teardown_service (&sh); 1885 teardown_service (&sh);
1906 GNUNET_free (sh.handlers); 1886 GNUNET_free_non_null (sh.handlers);
1907 GNUNET_SPEEDUP_stop_ (); 1887 GNUNET_SPEEDUP_stop_ ();
1908 GNUNET_CONFIGURATION_destroy (cfg); 1888 GNUNET_CONFIGURATION_destroy (cfg);
1909 GNUNET_free_non_null (logfile); 1889 GNUNET_free_non_null (logfile);