summaryrefslogtreecommitdiff
path: root/source3/printing/notify.c
diff options
context:
space:
mode:
authorVolker Lendecke <vlendec@samba.org>2007-05-20 19:43:49 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 12:22:16 -0500
commite0ebb46cff5d45a0bda6dd525e25ae71dec7ed57 (patch)
tree679286f20ff833736661783341379d1dc837e32c /source3/printing/notify.c
parent23c0e27b6cbedff77ec427191e9f56ee749414aa (diff)
downloadsamba-e0ebb46cff5d45a0bda6dd525e25ae71dec7ed57.tar.gz
samba-e0ebb46cff5d45a0bda6dd525e25ae71dec7ed57.tar.bz2
samba-e0ebb46cff5d45a0bda6dd525e25ae71dec7ed57.zip
r23023: Get rid of the only caller of message_send_pid_with_timeout(). This replaces
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)
Diffstat (limited to 'source3/printing/notify.c')
-rw-r--r--source3/printing/notify.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/source3/printing/notify.c b/source3/printing/notify.c
index 1285ca23a8..37ae003783 100644
--- a/source3/printing/notify.c
+++ b/source3/printing/notify.c
@@ -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;
+ }
}
}