summaryrefslogtreecommitdiff
path: root/source3/printing
diff options
context:
space:
mode:
Diffstat (limited to 'source3/printing')
-rw-r--r--source3/printing/notify.c32
1 files changed, 21 insertions, 11 deletions
diff --git a/source3/printing/notify.c b/source3/printing/notify.c
index 641f951bdd..428eb54ce4 100644
--- a/source3/printing/notify.c
+++ b/source3/printing/notify.c
@@ -24,6 +24,8 @@
static TALLOC_CTX *send_ctx;
+static unsigned int num_messages;
+
static struct notify_queue {
struct notify_queue *next, *prev;
struct spoolss_notify_msg *msg;
@@ -128,6 +130,7 @@ static void print_notify_send_messages_to_printer(const char *printer, unsigned
if (!flatten_message(pq)) {
DEBUG(0,("print_notify_send_messages: Out of memory\n"));
talloc_destroy_pool(send_ctx);
+ num_messages = 0;
return;
}
offset += (pq->buflen + 4);
@@ -140,6 +143,7 @@ static void print_notify_send_messages_to_printer(const char *printer, unsigned
if (!buf) {
DEBUG(0,("print_notify_send_messages: Out of memory\n"));
talloc_destroy_pool(send_ctx);
+ num_messages = 0;
return;
}
@@ -190,6 +194,7 @@ void print_notify_send_messages(unsigned int timeout)
print_notify_send_messages_to_printer(notify_queue_head->msg->printer, timeout);
talloc_destroy_pool(send_ctx);
+ num_messages = 0;
}
/**********************************************************************
@@ -225,23 +230,27 @@ static void send_spoolss_notify2_msg(SPOOLSS_NOTIFY_MSG *msg)
struct notify_queue *pnqueue, *tmp_ptr;
/*
- * Ensure we only have one message unique to each name/type/field/id/flags
- * tuple. There is no point in sending multiple messages that match
+ * Ensure we only have one job total_bytes and job total_pages for
+ * each job. There is no point in sending multiple messages that match
* as they will just cause flickering updates in the client.
*/
- for (tmp_ptr = notify_queue_head; tmp_ptr; tmp_ptr = tmp_ptr->next) {
- if (tmp_ptr->msg->type == msg->type &&
- tmp_ptr->msg->field == msg->field &&
- tmp_ptr->msg->id == msg->id &&
- tmp_ptr->msg->flags == msg->flags &&
- strequal(tmp_ptr->msg->printer, msg->printer)) {
+ if ((num_messages < 100) && (msg->type == JOB_NOTIFY_TYPE) &&
+ (msg->field == JOB_NOTIFY_TOTAL_BYTES || msg->field == JOB_NOTIFY_TOTAL_PAGES)) {
+
+ for (tmp_ptr = notify_queue_head; tmp_ptr; tmp_ptr = tmp_ptr->next) {
+ if (tmp_ptr->msg->type == msg->type &&
+ tmp_ptr->msg->field == msg->field &&
+ tmp_ptr->msg->id == msg->id &&
+ tmp_ptr->msg->flags == msg->flags &&
+ strequal(tmp_ptr->msg->printer, msg->printer)) {
- DEBUG(5, ("send_spoolss_notify2_msg: replacing message 0x%02x/0x%02x for printer %s \
+ DEBUG(5, ("send_spoolss_notify2_msg: replacing message 0x%02x/0x%02x for printer %s \
in notify_queue\n", msg->type, msg->field, msg->printer));
- tmp_ptr->msg = msg;
- return;
+ tmp_ptr->msg = msg;
+ return;
+ }
}
}
@@ -274,6 +283,7 @@ to notify_queue_head\n", msg->type, msg->field, msg->printer));
*/
DLIST_ADD_END(notify_queue_head, pnqueue, tmp_ptr);
+ num_messages++;
}
static void send_notify_field_values(const char *printer_name, uint32 type,