r15022: Fix core dumps on normal server exit.
authorJeremy Allison <jra@samba.org>
Mon, 10 Apr 2006 22:47:09 +0000 (22:47 +0000)
committerJeremy Allison <jra@samba.org>
Mon, 10 Apr 2006 22:47:09 +0000 (22:47 +0000)
Jeremy.

source/include/includes.h
source/smbd/process.c
source/smbd/server.c

index 7702b6645e9dbd9c6727be248aa012bf5c147e11..c83b707887af3828e07d7eacca2d2a7b5f7ef70b 100644 (file)
@@ -1564,7 +1564,7 @@ LDAP *ldap_open_with_timeout(const char *server, int port, unsigned int to);
 void smb_panic( const char *why ) NORETURN_ATTRIBUTE ;
 void dump_core(void) NORETURN_ATTRIBUTE ;
 void exit_server(const char *const reason) NORETURN_ATTRIBUTE ;
-void exit_server_cleanly(void) NORETURN_ATTRIBUTE ;
+void exit_server_cleanly(const char *const reason) NORETURN_ATTRIBUTE ;
 void exit_server_fault(void) NORETURN_ATTRIBUTE ;
 
 #endif /* _INCLUDES_H */
index cdeccab5e81a48d7442e1aec061763a5f1cc292f..b2634e2653168465ae57e5e4dc1534686434b112 100644 (file)
@@ -303,7 +303,7 @@ static void async_processing(fd_set *pfds)
        process_aio_queue();
 
        if (got_sig_term) {
-               exit_server_cleanly();
+               exit_server_cleanly("termination signal");
        }
 
        /* check for async change notify events */
@@ -886,7 +886,7 @@ static int switch_message(int type,char *inbuf,char *outbuf,int size,int bufsize
        /* Make sure this is an SMB packet. smb_size contains NetBIOS header so subtract 4 from it. */
        if ((strncmp(smb_base(inbuf),"\377SMB",4) != 0) || (size < (smb_size - 4))) {
                DEBUG(2,("Non-SMB packet of length %d. Terminating server\n",smb_len(inbuf)));
-               exit_server("Non-SMB packet");
+               exit_server_cleanly("Non-SMB packet");
                return(-1);
        }
 
@@ -1100,7 +1100,7 @@ static void process_smb(char *inbuf, char *outbuf)
                        static unsigned char buf[5] = {0x83, 0, 0, 1, 0x81};
                        DEBUG( 1, ( "Connection denied from %s\n", client_addr() ) );
                        (void)send_smb(smbd_server_fd(),(char *)buf);
-                       exit_server("connection denied");
+                       exit_server_cleanly("connection denied");
                }
        }
 
@@ -1122,7 +1122,7 @@ static void process_smb(char *inbuf, char *outbuf)
                        DEBUG(0,("ERROR: Invalid message response size! %d %d\n",
                                nread, smb_len(outbuf)));
                } else if (!send_smb(smbd_server_fd(),outbuf)) {
-                       exit_server("process_smb: send_smb failed.");
+                       exit_server_cleanly("process_smb: send_smb failed.");
                }
        }
        trans_num++;
index 0880778f55f99804cefddb5719e5e1df08ab7dab..d5a678b8508d7852d9bed4d07fe3924bf25d9685 100644 (file)
@@ -153,7 +153,7 @@ static void msg_exit_server(int msg_type, struct process_id src,
                            void *buf, size_t len)
 {
        DEBUG(3, ("got a SHUTDOWN message\n"));
-       exit_server_cleanly();
+       exit_server_cleanly(NULL);
 }
 
 #ifdef DEVELOPER
@@ -397,7 +397,7 @@ static BOOL open_sockets_smbd(BOOL is_daemon, BOOL interactive, const char *smb_
                
                if (num == -1 && errno == EINTR) {
                        if (got_sig_term) {
-                               exit_server_cleanly();
+                               exit_server_cleanly(NULL);
                        }
 
                        /* check for sighup processing */
@@ -681,9 +681,9 @@ void exit_server(const char *const explanation)
        exit_server_common(SERVER_EXIT_ABNORMAL, explanation);
 }
 
-void exit_server_cleanly(void)
+void exit_server_cleanly(const char *const explanation)
 {
-       exit_server_common(SERVER_EXIT_NORMAL, NULL);
+       exit_server_common(SERVER_EXIT_NORMAL, explanation);
 }
 
 void exit_server_fault(void)
@@ -1014,6 +1014,6 @@ void build_options(BOOL screen);
 
        namecache_shutdown();
 
-       exit_server_cleanly();
+       exit_server_cleanly(NULL);
        return(0);
 }