From: Samuel Thibault Date: Sat, 15 Jan 2022 23:02:16 +0000 (+0100) Subject: hurd: optimize exec cleanup X-Git-Tag: glibc-2.35~76 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=41a11a5e83265c7718787b9cfb8b3c109c59b980;p=thirdparty%2Fglibc.git hurd: optimize exec cleanup When ports are nul we do not need to request their deallocation. It is also useless to look for them in portnames. --- diff --git a/hurd/hurdexec.c b/hurd/hurdexec.c index d5a20cb9b09..0545935d801 100644 --- a/hurd/hurdexec.c +++ b/hurd/hurdexec.c @@ -383,19 +383,21 @@ retry: exec call. */ for (i = 0; i < _hurd_nports; ++i) - { - *pdp++ = ports[i]; - for (j = 0; j < nportnames; j++) - if (portnames[j] == ports[i]) - portnames[j] = MACH_PORT_NULL; - } + if (ports[i] != MACH_PORT_NULL) + { + *pdp++ = ports[i]; + for (j = 0; j < nportnames; j++) + if (portnames[j] == ports[i]) + portnames[j] = MACH_PORT_NULL; + } for (i = 0; i < dtablesize; ++i) - { - *pdp++ = dtable[i]; - for (j = 0; j < nportnames; j++) - if (portnames[j] == dtable[i]) - portnames[j] = MACH_PORT_NULL; - } + if (dtable[i] != MACH_PORT_NULL) + { + *pdp++ = dtable[i]; + for (j = 0; j < nportnames; j++) + if (portnames[j] == dtable[i]) + portnames[j] = MACH_PORT_NULL; + } /* Pack ports to be destroyed together. */ for (i = 0, j = 0; i < nportnames; i++) diff --git a/sysdeps/mach/hurd/dl-sysdep.c b/sysdeps/mach/hurd/dl-sysdep.c index 6d52558c242..3cbe075615b 100644 --- a/sysdeps/mach/hurd/dl-sysdep.c +++ b/sysdeps/mach/hurd/dl-sysdep.c @@ -611,19 +611,21 @@ __rtld_execve (const char *file_name, char *const argv[], } for (i = 0; i < portarraysize; ++i) - { - *pdp++ = ports[i]; - for (j = 0; j < nportnames; j++) - if (portnames[j] == ports[i]) - portnames[j] = MACH_PORT_NULL; - } + if (ports[i] != MACH_PORT_NULL) + { + *pdp++ = ports[i]; + for (j = 0; j < nportnames; j++) + if (portnames[j] == ports[i]) + portnames[j] = MACH_PORT_NULL; + } for (i = 0; i < dtablesize; ++i) - { - *pdp++ = dtable[i]; - for (j = 0; j < nportnames; j++) - if (portnames[j] == dtable[i]) - portnames[j] = MACH_PORT_NULL; - } + if (dtable[i] != MACH_PORT_NULL) + { + *pdp++ = dtable[i]; + for (j = 0; j < nportnames; j++) + if (portnames[j] == dtable[i]) + portnames[j] = MACH_PORT_NULL; + } /* Pack ports to be destroyed together. */ for (i = 0, j = 0; i < nportnames; i++)