6758621 Duplication of lines in smbd_main.c that lead to the creation of 4 listeners instead of 2
--- 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);
--- 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 <sys/ioccom.h>
#include <strings.h>
#include <unistd.h>
@@ -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);
}