- added ser profiling patch from Hendrik Scholz <hendrik.scholz@freenet-ag.de>,
authorAndrei Pelinescu-Onciul <andrei@iptel.org>
Wed, 20 Sep 2006 10:28:42 +0000 (10:28 +0000)
committerAndrei Pelinescu-Onciul <andrei@iptel.org>
Wed, 20 Sep 2006 10:28:42 +0000 (10:28 +0000)
 adapted to the new fork functions
 (for more info see http://lists.iptel.org/pipermail/serdev/2006-July/007627.html)

Makefile.defs
pt.c
pt.h

index e5d9761..3ce0ebe 100644 (file)
@@ -50,6 +50,7 @@
 #              sparc <= v8 support (andrei)
 #  2006-03-31  armv6 & mips64 support added
 #              mips and arm set to NOSMP by default (andrei)
+#  2006-07-10  added -DPROFILING (hscholz)
 
 
 # check if already included/exported
@@ -347,6 +348,9 @@ endif
 # -DUSE_DST_BLACKLIST
 #              blacklist bad destination (timeout, failed to connect, error sending
 #        a.s.o)
+# -DPROFILING
+#              if enabled profiling will be enabled for child processes
+#              Don't forget to set PROFILE (see below)
 
 # Sometimes is needes correct non-quoted $OS. HACK: gcc translates known OS to number ('linux'), so there is added underscore
 
@@ -376,9 +380,11 @@ DEFS+= $(extra_defs) \
         #-DNOSMP \
         #-DUSE_SHM_MEM \
         #-DSTATS \
-        #-DNO_LOG
+        #-DNO_LOG \
+        #-DPROFILING
 
-#PROFILE=  -pg #set this if you want profiling
+#PROFILE=  -pg # set this if you want profiling
+                               # you may also want to set -DPROFILING
 
 # WARNING: do not add mode=debug or mode=release anymore in the Makefile,
 # use make mode=debug all instead. Anyway no by default ser is  compiled w/ 
diff --git a/pt.c b/pt.c
index b9a588a..64dc6f7 100644 (file)
--- a/pt.c
+++ b/pt.c
@@ -32,6 +32,7 @@
  * History:
  * --------
  *  2006-06-14 added process table in shared mem (dragos)
+ *  2006-09-20 added profile support (-DPROFILING) (hscholz)
  */
 
 
 #include "tcp_init.h"
 #include "sr_module.h"
 
-#include "stdio.h"
+#include <stdio.h>
+#ifdef PROFILING
+#include <sys/gmon.h>
+
+       extern void _start(void);
+       extern void etext(void);
+#endif
 
 
 static int estimated_proc_no=0;
@@ -96,7 +103,7 @@ int get_max_procs()
 
 
 /* return processes pid */
-inline int my_pid()
+int my_pid()
 {
        return pt ? pt[process_no].pid : getpid();
 }
@@ -109,7 +116,7 @@ inline int my_pid()
  * @param make_sock - if to create a unix socket pair for it
  * @returns the pid of the new process
  */
-inline int fork_process(int child_id, char *desc, int make_sock)
+int fork_process(int child_id, char *desc, int make_sock)
 {
        int pid,old_process_no;
 #ifdef USE_TCP
@@ -143,6 +150,9 @@ inline int fork_process(int child_id, char *desc, int make_sock)
        }
        if (pid==0){
                /* child */
+#ifdef PROFILING
+               monstartup((u_long) &_start, (u_long) &etext);
+#endif
                /* wait for parent to get out of critical zone.
                 * this is actually relevant as the parent updates
                 * the pt & process_count. */
@@ -189,7 +199,7 @@ inline int fork_process(int child_id, char *desc, int make_sock)
  * @returns the pid of the new process
  */
 #ifdef USE_TCP
-inline int fork_tcp_process(int child_id,char *desc,int r,int *reader_fd_1)
+int fork_tcp_process(int child_id,char *desc,int r,int *reader_fd_1)
 {
        int pid,old_process_no;
        int sockfd[2];
@@ -230,6 +240,9 @@ inline int fork_tcp_process(int child_id,char *desc,int r,int *reader_fd_1)
                return pid;
        }
        if (pid==0){
+#ifdef PROFILING
+               monstartup((u_long) &_start, (u_long) &etext);
+#endif
                /* wait for parent to get out of critical zone */
                lock_get(process_lock);
                        close(sockfd[0]);
diff --git a/pt.h b/pt.h
index 6fdab95..e1362b1 100644 (file)
--- a/pt.h
+++ b/pt.h
@@ -66,12 +66,12 @@ extern int process_no;
 
 extern struct tcp_child* tcp_children;
 
-inline int init_pt();
+int init_pt();
 int get_max_procs();
 int register_procs(int no);
 
 /* return processes pid */
-inline int my_pid();
+int my_pid();
 
 /**
  * Forks a new process.
@@ -79,7 +79,7 @@ inline int my_pid();
  * @param make_sock - if to create a unix socket pair for it
  * @returns the pid of the new process
  */
-inline int fork_process(int child_id,char *desc,int make_sock);
+int fork_process(int child_id,char *desc,int make_sock);
 
 /**
  * Forks a new TCP process.
@@ -89,7 +89,7 @@ inline int fork_process(int child_id,char *desc,int make_sock);
  * @returns the pid of the new process
  */
 #ifdef USE_TCP
-inline int fork_tcp_process(int child_id,char *desc,int r,int *reader_fd_1);
+int fork_tcp_process(int child_id,char *desc,int r,int *reader_fd_1);
 #endif
 
 #endif