svn commit: r313941 - head/sys/kern
Hans Petter Selasky
hselasky at FreeBSD.org
Sun Feb 19 13:15:35 UTC 2017
Author: hselasky
Date: Sun Feb 19 13:15:33 2017
New Revision: 313941
URL: https://svnweb.freebsd.org/changeset/base/313941
Log:
Make sure the thread constructor and destructor eventhandlers are
called for all threads belonging to a procedure. Currently the first
thread in a procedure is kept around as an optimisation step and is
never freed. Because the first thread in a procedure is never freed
nor allocated, its destructor and constructor callbacks are never
called which means per thread structures allocated by dtrace and the
Linux emulation layers for example, might be present for threads which
don't need these structures.
This patch adds a thread construction and destruction call for the
first thread in a procedure.
Tested: dtrace, linux emulation
Reviewed by: kib @
MFC after: 1 week
Sponsored by: Mellanox Technologies
Modified:
head/sys/kern/kern_proc.c
Modified: head/sys/kern/kern_proc.c
==============================================================================
--- head/sys/kern/kern_proc.c Sun Feb 19 07:38:11 2017 (r313940)
+++ head/sys/kern/kern_proc.c Sun Feb 19 13:15:33 2017 (r313941)
@@ -191,11 +191,17 @@ static int
proc_ctor(void *mem, int size, void *arg, int flags)
{
struct proc *p;
+ struct thread *td;
p = (struct proc *)mem;
SDT_PROBE4(proc, , ctor , entry, p, size, arg, flags);
EVENTHANDLER_INVOKE(process_ctor, p);
SDT_PROBE4(proc, , ctor , return, p, size, arg, flags);
+ td = FIRST_THREAD_IN_PROC(p);
+ if (td != NULL) {
+ /* Make sure all thread constructors are executed */
+ EVENTHANDLER_INVOKE(thread_ctor, td);
+ }
return (0);
}
@@ -220,6 +226,9 @@ proc_dtor(void *mem, int size, void *arg
#endif
/* Free all OSD associated to this thread. */
osd_thread_exit(td);
+
+ /* Make sure all thread destructors are executed */
+ EVENTHANDLER_INVOKE(thread_dtor, td);
}
EVENTHANDLER_INVOKE(process_dtor, p);
if (p->p_ksi != NULL)
More information about the svn-src-all
mailing list