usr/src/cmd/smbsrv/smbd/smbd_main.c
changeset 7826 31ae58c8daeb
parent 7348 73b61202d5d6
child 7961 4b5e3051f38b
--- 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);