From: Samuel Thibault Date: Fri, 13 Nov 2020 00:21:47 +0000 (+0000) Subject: hurd: Make _hurd_libc_proc_init idempotent X-Git-Tag: glibc-2.33~306 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=946dcc6fde331a785d40d1341cc99a10ca304fd6;p=thirdparty%2Fglibc.git hurd: Make _hurd_libc_proc_init idempotent For the cases where _init is getting called several times during startup. Better clean pointers anyway. --- diff --git a/hurd/hurdinit.c b/hurd/hurdinit.c index e4ec005b48f..06a2d3b7fdd 100644 --- a/hurd/hurdinit.c +++ b/hurd/hurdinit.c @@ -114,17 +114,25 @@ libc_hidden_def (_hurd_init) void _hurd_libc_proc_init (char **argv) { - /* Tell the proc server we exist, if it does. */ - if (_hurd_portarray[INIT_PORT_PROC] != MACH_PORT_NULL) - _hurd_new_proc_init (argv, _hurd_intarray, _hurd_intarraysize); - - /* All done with init ints and ports. */ - __vm_deallocate (__mach_task_self (), - (vm_address_t) _hurd_intarray, - _hurd_intarraysize * sizeof (int)); - __vm_deallocate (__mach_task_self (), - (vm_address_t) _hurd_portarray, - _hurd_portarraysize * sizeof (mach_port_t)); + if (_hurd_portarray) + { + /* Tell the proc server we exist, if it does. */ + if (_hurd_portarray[INIT_PORT_PROC] != MACH_PORT_NULL) + _hurd_new_proc_init (argv, _hurd_intarray, _hurd_intarraysize); + + /* All done with init ints and ports. */ + __vm_deallocate (__mach_task_self (), + (vm_address_t) _hurd_intarray, + _hurd_intarraysize * sizeof (int)); + _hurd_intarray = NULL; + _hurd_intarraysize = 0; + + __vm_deallocate (__mach_task_self (), + (vm_address_t) _hurd_portarray, + _hurd_portarraysize * sizeof (mach_port_t)); + _hurd_portarray = NULL; + _hurd_portarraysize = 0; + } } libc_hidden_def (_hurd_libc_proc_init)