summaryrefslogtreecommitdiff
path: root/source3/lib/dmallocmsg.c
diff options
context:
space:
mode:
authorMartin Pool <mbp@samba.org>2002-01-09 08:27:15 +0000
committerMartin Pool <mbp@samba.org>2002-01-09 08:27:15 +0000
commit6c7050ea95001c6de6085f93e3d6332ed2c3aa60 (patch)
tree68e3d6470f8e4243c8f2cdc06ae2b1d9548cad36 /source3/lib/dmallocmsg.c
parenta56f0e93ea775ede87de478f9b09de2daa72ca27 (diff)
downloadsamba-6c7050ea95001c6de6085f93e3d6332ed2c3aa60.tar.gz
samba-6c7050ea95001c6de6085f93e3d6332ed2c3aa60.tar.bz2
samba-6c7050ea95001c6de6085f93e3d6332ed2c3aa60.zip
Add two more memory-debug smbcontrol messages: these ones should
prompt dmalloc to log information about what happening, so you can see in flight why smbd is getting bloated. (This used to be commit bcb443c5c4bf97fe6b5b0993e42496c2e64f0124)
Diffstat (limited to 'source3/lib/dmallocmsg.c')
-rw-r--r--source3/lib/dmallocmsg.c70
1 files changed, 70 insertions, 0 deletions
diff --git a/source3/lib/dmallocmsg.c b/source3/lib/dmallocmsg.c
new file mode 100644
index 0000000000..9d6ac87aeb
--- /dev/null
+++ b/source3/lib/dmallocmsg.c
@@ -0,0 +1,70 @@
+/*
+ samba -- Unix SMB/Netbios implementation.
+ Copyright (C) 2002 by Martin Pool
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*/
+
+#include "includes.h"
+
+/**
+ * @file dmallocmsg.c
+ *
+ * Glue code to cause dmalloc info to come out when we receive a prod
+ * over samba messaging.
+ **/
+
+static unsigned long our_dm_mark = 0;
+
+
+/**
+ * Respond to a POOL_USAGE message by sending back string form of memory
+ * usage stats.
+ **/
+static void msg_req_dmalloc_mark(int UNUSED(msg_type), pid_t UNUSED(src_pid),
+ void *UNUSED(buf), size_t UNUSED(len))
+{
+#ifdef ENABLE_DMALLOC
+ our_dm_mark = dmalloc_mark();
+ DEBUG(2,("Got MSG_REQ_DMALLOC_MARK: mark set\n"));
+#else
+ DEBUG(2,("Got MSG_REQ_DMALLOC_MARK but dmalloc not in this process\n"));
+#endif
+}
+
+
+
+static void msg_req_dmalloc_log_changed(int UNUSED(msg_type),
+ pid_t UNUSED(src_pid),
+ void *UNUSED(buf), size_t UNUSED(len))
+{
+#ifdef ENABLE_DMALLOC
+ dmalloc_log_changed(our_dm_mark, True, True, True);
+ DEBUG(2,("Got MSG_REQ_DMALLOC_LOG_CHANGED: done\n"));
+#else
+ DEBUG(2,("Got MSG_REQ_DMALLOC_LOG_CHANGED but dmalloc not in this process\n"));
+#endif
+}
+
+
+/**
+ * Register handler for MSG_REQ_POOL_USAGE
+ **/
+void register_dmalloc_msgs(void)
+{
+ message_register(MSG_REQ_DMALLOC_MARK, msg_req_dmalloc_mark);
+ message_register(MSG_REQ_DMALLOC_LOG_CHANGED, msg_req_dmalloc_log_changed);
+ DEBUG(2, ("Registered MSG_REQ_DMALLOC_MARK and LOG_CHANGED\n"));
+}