diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2016-08-20 21:01:04 +0200 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2016-08-20 21:01:04 +0200 |
commit | 2f9a655079b89bca89c976a144d762a88d39098f (patch) | |
tree | 9c098a929e9d8180f495e1e106fbb89bab74328d /sysdeps/mach/hurd/i386 | |
parent | 688dd91756d4c8e7005eb25b0bf96ede8c32d639 (diff) | |
parent | 0ade236f193778d89a77d8f8b4a99cabdf8fad93 (diff) |
Merge branch 't/tls_thread_leak' into refs/top-bases/tschwinge/Roger_Whittaker
Diffstat (limited to 'sysdeps/mach/hurd/i386')
-rw-r--r-- | sysdeps/mach/hurd/i386/tls.h | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/sysdeps/mach/hurd/i386/tls.h b/sysdeps/mach/hurd/i386/tls.h index f04e5cd378..32bc1a70a9 100644 --- a/sysdeps/mach/hurd/i386/tls.h +++ b/sysdeps/mach/hurd/i386/tls.h @@ -117,9 +117,6 @@ _hurd_tls_init (tcbhead_t *tcb) from the TLS point of view. */ tcb->tcb = tcb; - /* Cache our thread port. */ - tcb->self = __mach_thread_self (); - /* Get the first available selector. */ int sel = -1; kern_error_t err = __i386_set_gdt (tcb->self, &sel, desc); @@ -127,20 +124,26 @@ _hurd_tls_init (tcbhead_t *tcb) { /* Old kernel, use a per-thread LDT. */ sel = 0x27; - err = __i386_set_ldt (tcb->self, sel, &desc, 1); + err = __i386_set_ldt (self, sel, &desc, 1); assert_perror (err); if (err) - return "i386_set_ldt failed"; + { + msg = "i386_set_ldt failed"; + goto out; + } } else if (err) { assert_perror (err); /* Separate from above with different line #. */ - return "i386_set_gdt failed"; + msg = "i386_set_gdt failed"; + goto out; } /* Now install the new selector. */ asm volatile ("mov %w0, %%gs" :: "q" (sel)); +out: + __mach_port_deallocate (__mach_task_self (), self); return 0; } |