diff options
author | Peter Palfrader <peter@palfrader.org> | 2007-08-20 22:11:56 +0000 |
---|---|---|
committer | Peter Palfrader <peter@palfrader.org> | 2007-08-20 22:11:56 +0000 |
commit | 8c3d14cda5ef80b703eee8f49599982ba8b8abcf (patch) | |
tree | b07ba29d930dc1da926e713de40500ba9d0725c8 /src | |
parent | f99ac7fe522c75775c39fa4ba11214ce794a8f62 (diff) | |
download | tor-8c3d14cda5ef80b703eee8f49599982ba8b8abcf.tar tor-8c3d14cda5ef80b703eee8f49599982ba8b8abcf.tar.gz |
Optionally export mallinfo() output on the DirPort
svn:r11232
Diffstat (limited to 'src')
-rw-r--r-- | src/or/directory.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/or/directory.c b/src/or/directory.c index a6f39538a..7f31726a7 100644 --- a/src/or/directory.c +++ b/src/or/directory.c @@ -6,6 +6,9 @@ const char directory_c_id[] = "$Id$"; #include "or.h" +#if defined(EXPORTMEMINFO) && defined(HAVE_MALLOC_H) && defined(HAVE_MALLINFO) +#include <malloc.h> +#endif /** * \file directory.c @@ -2193,6 +2196,46 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers, goto done; } +#if defined(EXPORTMEMINFO) && defined(HAVE_MALLOC_H) && defined(HAVE_MALLINFO) +#define ADD_MALLINFO_LINE(x) do { \ + tor_snprintf(tmp, sizeof(tmp), "%s %d\n", #x, mi.x); \ + smartlist_add(lines, tor_strdup(tmp)); \ + } while(0); + + if (!strcmp(url,"/tor/mallinfo.txt") && + (conn->_base.addr == 0x7f000001ul)) { + char *result; + size_t len; + struct mallinfo mi; + memset(&mi, 0, sizeof(mi)); + smartlist_t *lines; + + mi = mallinfo(); + lines = smartlist_create(); + char tmp[256]; + + ADD_MALLINFO_LINE(arena) + ADD_MALLINFO_LINE(ordblks) + ADD_MALLINFO_LINE(smblks) + ADD_MALLINFO_LINE(hblks) + ADD_MALLINFO_LINE(hblkhd) + ADD_MALLINFO_LINE(usmblks) + ADD_MALLINFO_LINE(fsmblks) + ADD_MALLINFO_LINE(uordblks) + ADD_MALLINFO_LINE(fordblks) + ADD_MALLINFO_LINE(keepcost) + + result = smartlist_join_strings(lines, "", 0, NULL); + SMARTLIST_FOREACH(lines, char *, cp, tor_free(cp)); + smartlist_free(lines); + + len = strlen(result); + write_http_response_header(conn, len, 0, 0); + connection_write_to_buf(result, len, TO_CONN(conn)); + tor_free(result); + } +#endif + /* we didn't recognize the url */ write_http_status_line(conn, 404, "Not found"); |