Print this page
NEX-19665 Several door servers don't properly handle exiting threads
Review by: Gordon Ross <gordon.ross@nexenta.com>
Review by: Evan Layton <evan.layton@nexenta.com>
*** 20,29 ****
--- 20,30 ----
*/
/*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
* Copyright 2012 Milan Jurik. All rights reserved.
+ * Copyright 2019 Nexenta Systems, Inc.
*/
#include <stdlib.h>
#include <alloca.h>
#include <signal.h>
*** 85,95 ****
*/
/*ARGSUSED*/
static void *
server_tsd_bind(void *arg)
{
! static void *value = 0;
/* disable cancellation to avoid hangs if server threads disappear */
(void) pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
(void) thr_setspecific(server_key, value);
(void) door_return(NULL, 0, NULL, 0);
--- 86,96 ----
*/
/*ARGSUSED*/
static void *
server_tsd_bind(void *arg)
{
! static void *value = "NON-NULL TSD";
/* disable cancellation to avoid hangs if server threads disappear */
(void) pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL);
(void) thr_setspecific(server_key, value);
(void) door_return(NULL, 0, NULL, 0);
*** 124,133 ****
--- 125,135 ----
server_destroy(void *arg)
{
(void) mutex_lock(&create_lock);
num_servers--;
(void) mutex_unlock(&create_lock);
+ (void) thr_setspecific(server_key, NULL);
}
/*
* get clearance
*/