1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-21 18:04:06 +03:00

Limit the number of outstanding print notify messages for a process to

1000.
Jeremy.
This commit is contained in:
Jeremy Allison -
parent 2172e558fb
commit aabaac05c6
2 changed files with 39 additions and 1 deletions

View File

@ -303,6 +303,37 @@ BOOL message_send_pid_with_timeout(pid_t pid, int msg_type, const void *buf, siz
return message_send_pid_internal(pid, msg_type, buf, len, duplicates_allowed, timeout);
}
/****************************************************************************
Count the messages pending for a particular pid. Expensive....
****************************************************************************/
unsigned int messages_pending_for_pid(pid_t pid)
{
TDB_DATA kbuf;
TDB_DATA dbuf;
char *buf;
unsigned int message_count = 0;
kbuf = message_key_pid(sys_getpid());
dbuf = tdb_fetch(tdb, kbuf);
if (dbuf.dptr == NULL || dbuf.dsize == 0) {
SAFE_FREE(dbuf.dptr);
return 0;
}
for (buf = dbuf.dptr; dbuf.dsize > sizeof(struct message_rec);) {
struct message_rec rec;
memcpy(&rec, buf, sizeof(rec));
buf += (sizeof(rec) + rec.len);
dbuf.dsize -= (sizeof(rec) + rec.len);
message_count++;
}
SAFE_FREE(dbuf.dptr);
return message_count;
}
/****************************************************************************
Retrieve all messages for the current process.
****************************************************************************/

View File

@ -174,8 +174,15 @@ static void print_notify_send_messages_to_printer(const char *printer, unsigned
if (!print_notify_pid_list(printer, send_ctx, &num_pids, &pid_list))
return;
for (i = 0; i < num_pids; i++)
for (i = 0; i < num_pids; i++) {
unsigned int q_len = messages_pending_for_pid(pid_list[i]);
if (q_len > 1000) {
DEBUG(5, ("print_notify_send_messages_to_printer: discarding notify to printer %s as queue length = %u\n",
printer, q_len ));
continue;
}
message_send_pid_with_timeout(pid_list[i], MSG_PRINTER_NOTIFY2, buf, offset, True, timeout);
}
}
/*******************************************************************