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)
committerStefan Metzmacher <metze@samba.org>
Mon, 22 Mar 2010 16:15:11 +0000 (17:15 +0100)
metze

source3/smbd/process.c

index aaafad416715d2b8f122dd325d297486b5f0aa44..e1e4e77634584d279ea7e4d32cb746f575bbb504 100644 (file)
@@ -2234,7 +2234,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;
        }