6758621 Duplication of lines in smbd_main.c that lead to the creation of 4 listeners instead of 2 onnv_101
authorjose borrego <Jose.Borrego@Sun.COM>
Mon, 13 Oct 2008 22:40:15 -0600
changeset 7826 31ae58c8daeb
parent 7825 d50204436926
child 7827 1e5dcbe789ff
6758621 Duplication of lines in smbd_main.c that lead to the creation of 4 listeners instead of 2
usr/src/cmd/smbsrv/smbd/smbd_main.c
usr/src/cmd/smbsrv/smbd/smbd_net.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);
--- 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);
 }