diff options
author | Jeremy Allison <jra@samba.org> | 2003-04-23 00:19:16 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2003-04-23 00:19:16 +0000 |
commit | aabaac05c6adbb510ed27f87115de3e83e27158c (patch) | |
tree | dfd87797649d1008b03637f601791ff6483fca2c /source/lib/messages.c | |
parent | 2172e558fbb75937592583e81355da4471897032 (diff) | |
download | samba-aabaac05c6adbb510ed27f87115de3e83e27158c.tar.gz samba-aabaac05c6adbb510ed27f87115de3e83e27158c.tar.xz samba-aabaac05c6adbb510ed27f87115de3e83e27158c.zip |
Limit the number of outstanding print notify messages for a process to
1000.
Jeremy.
Diffstat (limited to 'source/lib/messages.c')
-rw-r--r-- | source/lib/messages.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/source/lib/messages.c b/source/lib/messages.c index 0615cc18837..8706ede7065 100644 --- a/source/lib/messages.c +++ b/source/lib/messages.c @@ -304,6 +304,37 @@ BOOL message_send_pid_with_timeout(pid_t pid, int msg_type, const void *buf, siz } /**************************************************************************** + 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. ****************************************************************************/ |