r23023: Get rid of the only caller of message_send_pid_with_timeout(). This replaces
authorVolker Lendecke <vlendec@samba.org>
Sun, 20 May 2007 19:43:49 +0000 (19:43 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:22:16 +0000 (12:22 -0500)
the timeouts on the individual message send calls with an overall timeout on
all the calls.

The timeout in message_send_pid_with_timeout() did not make much sense IMO
anyway, because the tdb_fetch() for the messages_pending_for_pid was blocking
in a readlock anyway, we "just" did the timeout for the write lock.

This new code goes through the full wait for the write lock once and then
breaks out of sending the notifies instead of running into the timeout per
target.

Jerry, please check this!

Thanks,

Volker
(This used to be commit 697099f06e1aa432187f802b9c2632607e3de46e)

source3/lib/messages.c
source3/printing/notify.c

index 30056de716255a8eda6a9d34f543e71be57fda30..479a6952a6a5283f0b2f3a8710530dfa77e84763 100644 (file)
@@ -872,14 +872,4 @@ NTSTATUS messaging_send_buf(struct messaging_context *msg_ctx,
        return messaging_send(msg_ctx, server, msg_type, &blob);
 }
 
-NTSTATUS messaging_send_buf_with_timeout(struct messaging_context *msg_ctx,
-                                        struct server_id server,
-                                        uint32_t msg_type,
-                                        const uint8 *buf, size_t len,
-                                        int timeout)
-{
-       return message_send_pid_internal(server, msg_type, buf, len,
-                                        True, timeout);
-}
-
 /** @} **/
index 1285ca23a86109ac093be539fd88a2172cea3108..37ae0037833e3b4a244627c2a115aa368a8c3984 100644 (file)
@@ -126,6 +126,7 @@ static void print_notify_send_messages_to_printer(struct messaging_context *msg_
        size_t num_pids = 0;
        size_t i;
        pid_t *pid_list = NULL;
+       struct timeval end_time = timeval_zero();
 
        /* Count the space needed to send the messages. */
        for (pq = notify_queue_head; pq; pq = pq->next) {
@@ -177,6 +178,10 @@ static void print_notify_send_messages_to_printer(struct messaging_context *msg_
        if (!print_notify_pid_list(printer, send_ctx, &num_pids, &pid_list))
                return;
 
+       if (timeout != 0) {
+               end_time = timeval_current_ofs(timeout, 0);
+       }
+
        for (i = 0; i < num_pids; i++) {
                unsigned int q_len = messages_pending_for_pid(pid_to_procid(pid_list[i]));
                if (q_len > 1000) {
@@ -184,11 +189,14 @@ static void print_notify_send_messages_to_printer(struct messaging_context *msg_
                                printer, q_len ));
                        continue;
                }
-               messaging_send_buf_with_timeout(msg_ctx,
-                                               pid_to_procid(pid_list[i]),
-                                               MSG_PRINTER_NOTIFY2,
-                                               (uint8 *)buf, offset,
-                                               timeout);
+               messaging_send_buf(msg_ctx,
+                                  pid_to_procid(pid_list[i]),
+                                  MSG_PRINTER_NOTIFY2,
+                                  (uint8 *)buf, offset);
+
+               if ((timeout != 0) && timeval_expired(&end_time)) {
+                       break;
+               }
        }
 }