# HG changeset patch # User jose borrego # Date 1223959215 21600 # Node ID 31ae58c8daeb787265b17df5907c516904d8ac3f # Parent d502044369262ebd969b0db0a69c02a0b1ffe84a 6758621 Duplication of lines in smbd_main.c that lead to the creation of 4 listeners instead of 2 diff -r d50204436926 -r 31ae58c8daeb usr/src/cmd/smbsrv/smbd/smbd_main.c --- a/usr/src/cmd/smbsrv/smbd/smbd_main.c Tue Oct 14 12:24:13 2008 +0800 +++ b/usr/src/cmd/smbsrv/smbd/smbd_main.c Mon Oct 13 22:40:15 2008 -0600 @@ -628,7 +628,10 @@ static int smbd_kernel_bind(void) { + pthread_attr_t tattr; smb_io_t smb_io; + int rc1; + int rc2; int rc; bzero(&smb_io, sizeof (smb_io)); @@ -663,25 +666,28 @@ return (errno); } - rc = pthread_create(&nbt_listener, NULL, smbd_nbt_listener, NULL); + (void) pthread_attr_init(&tattr); + (void) pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED); + + rc1 = pthread_create(&nbt_listener, &tattr, smbd_nbt_listener, NULL); + if (rc1 != 0) + smbd_report("unable to start NBT service"); + + rc2 = pthread_create(&tcp_listener, &tattr, smbd_tcp_listener, NULL); + if (rc2 != 0) + smbd_report("unable to start TCP service"); + + (void) pthread_attr_destroy(&tattr); + + rc = rc1; + if (rc == 0) + rc = rc2; + if (rc == 0) { - rc = pthread_create(&tcp_listener, NULL, smbd_tcp_listener, - NULL); - if (rc == 0) { - smbd.s_kbound = B_TRUE; - return (0); - } + smbd.s_kbound = B_TRUE; + return (0); } - rc = pthread_create(&nbt_listener, NULL, smbd_nbt_listener, NULL); - if (rc == 0) { - rc = pthread_create(&tcp_listener, NULL, smbd_tcp_listener, - NULL); - if (rc == 0) { - smbd.s_kbound = B_TRUE; - return (0); - } - } (void) close(smbd.s_drv_fd); smbd.s_drv_fd = -1; return (rc); diff -r d50204436926 -r 31ae58c8daeb usr/src/cmd/smbsrv/smbd/smbd_net.c --- a/usr/src/cmd/smbsrv/smbd/smbd_net.c Tue Oct 14 12:24:13 2008 +0800 +++ b/usr/src/cmd/smbsrv/smbd/smbd_net.c Mon Oct 13 22:40:15 2008 -0600 @@ -27,8 +27,6 @@ * Structures and type definitions for the SMB module. */ -#pragma ident "%Z%%M% %I% %E% SMI" - #include #include #include @@ -58,6 +56,7 @@ void * smbd_nbt_listener(void *arg) { + pthread_attr_t tattr; sigset_t set; sigset_t oset; smb_io_t smb_io; @@ -67,14 +66,18 @@ (void) sigdelset(&set, SIGTERM); (void) sigdelset(&set, SIGINT); (void) pthread_sigmask(SIG_SETMASK, &set, &oset); + (void) pthread_attr_init(&tattr); + (void) pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED); bzero(&smb_io, sizeof (smb_io)); smb_io.sio_version = SMB_IOC_VERSION; while (ioctl(smbd.s_drv_fd, SMB_IOC_NBT_LISTEN, &smb_io) == 0) { - smb_io.sio_data.error = pthread_create(&tid, NULL, + smb_io.sio_data.error = pthread_create(&tid, &tattr, smbd_nbt_receiver, NULL); } + (void) pthread_attr_destroy(&tattr); + return (NULL); } @@ -95,6 +98,7 @@ void * smbd_tcp_listener(void *arg) { + pthread_attr_t tattr; sigset_t set; sigset_t oset; smb_io_t smb_io; @@ -104,13 +108,17 @@ (void) sigdelset(&set, SIGTERM); (void) sigdelset(&set, SIGINT); (void) pthread_sigmask(SIG_SETMASK, &set, &oset); + (void) pthread_attr_init(&tattr); + (void) pthread_attr_setdetachstate(&tattr, PTHREAD_CREATE_DETACHED); bzero(&smb_io, sizeof (smb_io)); smb_io.sio_version = SMB_IOC_VERSION; while (ioctl(smbd.s_drv_fd, SMB_IOC_TCP_LISTEN, &smb_io) == 0) { - smb_io.sio_data.error = pthread_create(&tid, NULL, + smb_io.sio_data.error = pthread_create(&tid, &tattr, smbd_tcp_receiver, NULL); } + (void) pthread_attr_destroy(&tattr); + return (NULL); }