]> source.dussan.org Git - rspamd.git/commitdiff
* Enable gprof support
authorVsevolod Stakhov <vsevolod@rambler-co.ru>
Wed, 29 Apr 2009 12:37:03 +0000 (16:37 +0400)
committerVsevolod Stakhov <vsevolod@rambler-co.ru>
Wed, 29 Apr 2009 12:37:03 +0000 (16:37 +0400)
CMakeLists.txt
config.h.in
src/main.c
src/worker.c

index 3b89b265bbef3e49d840a75850775f3ef0c1d50d..59537af1164ccf3f4219c5a68c34322192995a96 100644 (file)
@@ -22,6 +22,7 @@ OPTION(ENABLE_PERL         "Enable perl support [default: OFF]"
 OPTION(ENABLE_LUA          "Enable lua support [default: OFF]"                  OFF)
 OPTION(SKIP_RELINK_RPATH   "Skip relinking and full RPATH for the install tree" OFF)
 OPTION(ENABLE_REDIRECTOR   "Enable redirector install [default: OFF]"           OFF)
+OPTION(ENABLE_PROFILING    "Enable profiling [default: OFF]"                    OFF)
 
 # Build optimized code for following CPU (default i386)
 #SET(CPU_TUNE               "i686")
@@ -136,6 +137,13 @@ IF(NOT LIBEVENT_LIBRARY)
        MESSAGE(FATAL_ERROR "libevent is required for building rspamd")
 ENDIF(NOT LIBEVENT_LIBRARY)
 
+IF(ENABLE_PROFILING MATCHES "ON")
+       SET(WITH_PROFILER 1)
+       SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -pg")
+       SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -pg")
+ENDIF(ENABLE_PROFILING MATCHES "ON")
+
+
 FIND_PATH(LIBEVENT_INCLUDE event.h PATHS       /opt/include
                                                                                /usr/include
                                                                                /usr/local/include
index 1fd8a53618c12d18c06b496f2478d36b38b580ab..14530362f63f936849097d671984cef6f077a803 100644 (file)
@@ -99,6 +99,8 @@
 
 #cmakedefine WITH_LUA            1
 
+#cmakedefine WITH_PROFILER       1
+
 #define RVERSION          "${RSPAMD_VERSION}"
 #define RSPAMD_MASTER_SITE_URL "${RSPAMD_MASTER_SITE_URL}"
 
index 2bc79cf144b1a826653aaba0696f55ba413cda9b..bb8028441deadfc46d049a0cbfcdd080688403ce 100644 (file)
@@ -687,8 +687,7 @@ main (int argc, char **argv, char **env)
        }
        
        msg_info ("main: terminating...");
-
-
+       
        if (rspamd->cfg->bind_family == AF_UNIX) {
                unlink (rspamd->cfg->bind_host);
        }
index 20e04ed5e8b0b90cd0166fc720ca1714436d8832..ee00bb63b760200010757bc162bcd442bb5702aa 100644 (file)
@@ -53,7 +53,11 @@ void sig_handler (int signo)
        switch (signo) {
                case SIGINT:
                case SIGTERM:
+#ifdef WITH_PROFILER
+                       exit (0);
+#else
                        _exit (1);
+#endif
                        break;
        }
 }
@@ -293,6 +297,18 @@ start_worker (struct rspamd_worker *worker, int listen_sock)
 {
        struct sigaction signals;
        int i;
+#ifdef WITH_PROFILER
+       extern void _start (void), etext (void);
+       monstartup ((u_long) &_start, (u_long) &etext);
+#endif
+#if 0
+       /* Try to create temp directory for gmon.out and chdir to it */
+       char prof_dir[PATH_MAX];
+       snprintf (prof_dir, sizeof (prof_dir), "%s/rspamd-prof-%d", worker->srv->cfg->temp_dir, (int)getpid ());
+       if (mkdir (prof_dir, S_IRUSR | S_IWUSR | S_IXUSR | S_IXOTH | S_IROTH | S_IXGRP | S_IRGRP) != -1) {
+               chdir (prof_dir);
+       }
+#endif
 
        worker->srv->pid = getpid ();
        worker->srv->type = TYPE_WORKER;