s3:smbd: send keepalive packets under the socket lock
authorStefan Metzmacher <metze@samba.org>
Fri, 19 Mar 2010 11:02:27 +0000 (12:02 +0100)
committerMichael Adam <obnox@samba.org>
Fri, 26 Mar 2010 11:43:04 +0000 (12:43 +0100)
metze
(cherry picked from commit c1653e3b0e536e835faf82a5aadadaec1cd38d1a)

source3/smbd/process.c

index 4bcce1b72a7b0f1a80666036b90678a3065cc0d0..4fdd115df7c988c7a848fc6cdf3f271a33596148 100644 (file)
@@ -2010,7 +2010,22 @@ static int client_get_tcp_info(struct sockaddr_storage *server,
  */
 static bool keepalive_fn(const struct timeval *now, void *private_data)
 {
-       if (!send_keepalive(smbd_server_fd())) {
+       bool ok;
+       bool ret;
+
+       ok = smbd_lock_socket(smbd_server_conn);
+       if (!ok) {
+               exit_server_cleanly("failed to lock socket");
+       }
+
+       ret = send_keepalive(smbd_server_fd());
+
+       ok = smbd_unlock_socket(smbd_server_conn);
+       if (!ok) {
+               exit_server_cleanly("failed to unlock socket");
+       }
+
+       if (!ret) {
                DEBUG( 2, ( "Keepalive failed - exiting.\n" ) );
                return False;
        }