From 30418a47c609fdff286bcab4e29e3fe0b244632e Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Wed, 23 Apr 2003 00:19:30 +0000 Subject: Limit the number of outstanding print notify messages for a process to 1000. Jeremy. (This used to be commit 2e5e4c10d2377493913554e7dab79d97a4d16d87) --- source3/lib/messages.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'source3/lib') diff --git a/source3/lib/messages.c b/source3/lib/messages.c index 0615cc1883..8706ede706 100644 --- a/source3/lib/messages.c +++ b/source3/lib/messages.c @@ -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. ****************************************************************************/ -- cgit