]> SAFE projects GIT repository - jmp/mailleur/commitdiff
Foreground working and no apprent memory leak
authorJean-Marc Pigeon (Delson) <jmp@safe.ca>
Wed, 26 Mar 2025 14:59:00 +0000 (10:59 -0400)
committerJean-Marc Pigeon (Delson) <jmp@safe.ca>
Wed, 26 Mar 2025 14:59:00 +0000 (10:59 -0400)
Makefile
lib/devsoc.c
lib/gestcp.c
lib/lvleml.c
lib/modrec.c
lib/subrou.c
lib/unisig.c

index c4174df10ab2566cd007adb0772bc2f3546e3261..72959d1e16d4f9c53b3322564bf162f03d5af0f4 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -39,6 +39,13 @@ FEEDPAR      =                                               \
                $(TESTPORT)                             \
                $(TESTDIR)/$(DATATST)/feed*.tst         \
 
+onefeed        :       debug
+               @ bin/feeder                            \
+                       -d 3                            \
+                       $(TESTIP)                       \
+                       $(TESTPORT)                     \
+                       $(TESTDIR)/$(DATATST)/feed00.tst
+
 #direct test
 tstfeed        :       debug
                @ bin/feeder $(FEEDPAR)
@@ -56,15 +63,16 @@ EMLPAR      =                                               \
           -d 8                                         \
           :$(TESTIP):$(TESTPORT)                       \
 
-emlrcvr        :  debug newtest
+emlrcvr        :  clean debug newtest          #starting email receiver
           @ echo
           @ echo "--------------"
           @ echo "starting $@"
           @ $(TESTDIR)/$(SBINDIR)/$@                   \
+               -f                                      \
                $(EMLPAR) 
           @ echo "--------------"
 
-valrcvr        :  clean debug newtest          #valgrin dest
+valrcvr        :  clean debug newtest          #valgring of emlrcvr
           @ echo "emlrec valgrind test"
           @ valgrind                                   \
                --leak-check=full                       \
@@ -77,7 +85,7 @@ valrcvr       :  clean debug newtest          #valgrin dest
 #              --track-origins=yes                     \
 #              --trace-children=no                     \
 
-dbgrcvr        :  clean debug newtest          #using gdb
+dbgrcvr        :  clean debug newtest          #debugging emlrcvr
           @ gdb --args                                 \
                $(TESTDIR)/$(SBINDIR)/emlrcvr           \
                -f                                      \
@@ -105,11 +113,11 @@ newtest   :  deltest
           @ mkdir -p $(TESTDIR)/var/run
           @ mkdir -p $(TESTDIR)/var/spool/clement/{in,out}-logs
           @ mkdir -p $(TESTDIR)/$(SBINDIR)
-          @ cp -a                                              \
-               bin/{chkspf,emlrcvr}                            \
+          @ cp -a                                      \
+               bin/{chkspf,emlrcvr}                    \
                $(TESTDIR)/$(SBINDIR)
-          @ cp -a                                              \
-               $(DATATST)                                      \
+          @ cp -a                                      \
+               $(DATATST)                              \
                $(TESTDIR)
 
 deltest        :  
@@ -122,9 +130,9 @@ install     :
           @ echo $@ need to implemented
 
 #--------------------------------------------------------------------
-SUBDIR =                                                               \
-          lib                                                          \
-          app                                                          \
+SUBDIR =                                               \
+          lib                                          \
+          app                                          \
 
 #--------------------------------------------------------------------
 #definitions globale
index a99ac98431a5cdf37d11ffdf88662f48ed5d62c6..5e5650eba0eeba00004d414488e5346406c1c3c6 100644 (file)
@@ -739,6 +739,7 @@ if (seteuid(getuid())<0)
 phase=0;
 proceed=true;
 while (proceed==true) {
+  (void) rou_alert(0,"JMPDBG %s phase='%d'",OPEP,phase);
   switch (phase) {
     case 0      :       //sanity check
       if (soc==(SOCTYP *)0) {
@@ -747,8 +748,9 @@ while (proceed==true) {
         }
       break;
     case 1      :       //check if time to retry binding
-      if ((soc->lasttry+5)>time((time_t)0))
+      if ((soc->lasttry+5)>time((time_t)0)) {
         phase=999;      //no need to go further
+        }
       break;
     case 2      :       //to have the right address infp
       int status;
@@ -832,6 +834,7 @@ while (proceed==true) {
       soc->handle=-1;
       break;
     default     :       //SAFE Guard
+      soc->lasttry=(time_t)0;
       proceed=false;
       break;
     }
@@ -851,6 +854,7 @@ while (proceed==true) {
 PUBLIC int soc_waitforchar(SOCPTR *socptr,TIMESPEC *attend)
 
 {
+#define OPEP    "devsoc.c:soc_waitforchar"
 register int status;
 SOCTYP *soc;
 
@@ -859,7 +863,7 @@ soc=(SOCTYP *)socptr;
 if (soc!=(SOCTYP *)0) {      
   struct pollfd polling[1];
 
-  polling[0].events=POLLIN|POLLPRI;
+  polling[0].events=POLLIN|POLLPRI|POLLERR|POLLHUP;
   polling[0].revents=(short)0;
   switch (soc->modtls) {
     case true   :
@@ -870,8 +874,29 @@ if (soc!=(SOCTYP *)0) {
       break;
     }
   status=ppoll(polling,1,attend,(sigset_t *)0);
+  switch (status) {
+    case -1     :
+      (void) rou_alert(0,"%s Polling error (error=<%s>)",OPEP,strerror(errno));
+      break;
+    case  0     :
+      (void) rou_alert(0,"%s Polling timeout",OPEP);
+      break;
+    case 1      :
+      if ((polling[0].revents&POLLHUP)==POLLHUP) {
+        (void) close(soc->handle);
+        soc->handle=-1;
+        status=0;
+        }
+      if ((polling[0].revents&POLLERR)==POLLERR) {
+        (void) rou_alert(0,"%s Polling POLLERR detection",OPEP);
+        }
+      break;
+    default     :
+      break;
+    }
   }
 return status;
+#undef  OPEP
 }
 /*
 ^L
@@ -953,6 +978,8 @@ return got;
 PUBLIC  int soc_writebuffer(SOCPTR *socptr,char *buffer,int tosend)
 
 {
+#define OPEP    "devsoc.c:soc_writebuffer"
+
 int sent;
 SOCTYP *soc;
 
@@ -967,8 +994,13 @@ if (soc!=(SOCTYP *)0) {
       sent=send(soc->handle,buffer,tosend,0);
       break;
     }
+  if (sent<0) {
+    (void) rou_alert(0,"%s Unable to send data, error=%d <%s> (Bug)",
+                        OPEP,errno,strerror(errno));
+    }
   }
 return sent;
+#undef  OPEP
 }
 /*
 ^L
index 2c34b416021512c4fede87b92fbe755fcb8c99f9..dbf30cb51033e7dbf1e9f556708b6127adb8df22 100644 (file)
@@ -42,6 +42,7 @@ got=0;
 phase=0;
 proceed=true;
 while (proceed==true) {
+  (void) rou_alert(0,"JMPDBG %s phase='%d'",OPEP,phase);
   switch (phase) {
     case 0      :
       if (socptr==(SOCPTR *)0) {
@@ -52,9 +53,11 @@ while (proceed==true) {
     case 1      :       //get nextline
       if ((got=soc_getnextline(socptr,lineptr))>0)
         phase=999;      //we got a line.
+      (void) rou_alert(0,"JMPDBG %s phase='%d' got='%d'",OPEP,phase,got);
       break;
     case 2      :       //waiting for new character presence
       got=soc_waitforchar(socptr,attend);
+      (void) rou_alert(0,"JMPDBG %s phase='%d' got='%d'",OPEP,phase,got);
       switch (got) {
         case -1         :       //trouble? signal?
           if ((hangup==true)||(reload==true))
index 3cb2640117a843c189bc1b66d438e5b5cfaaf4fe..352ccaf7cf59e8355bdfe8c33204016efb5efcff 100644 (file)
@@ -318,8 +318,11 @@ while (proceed==true) {
   attend.tv_sec=60;
   attend.tv_nsec=0;
   status=tcp_getline(contact->socptr,&attend,&line);
-  if (status<=0)        //timeout or trouble?
+  (void) rou_alert(0,"%s, JMPDBG tcp_getline status='%d'",OPEP,status);
+  if (status<=0) {       //timeout or trouble?
+    (void) rou_alert(0,"%s, lost contact",OPEP);
     break;              //no need to go further
+    }
   (void) log_fprintlog(contact->logptr,false,"%s",line);
   switch (eml_getcode(line)) {
     case c_helo         :       //HELO SMTP protocol
index db5d904cce56d5abb5336e518e0bb209cae00284..4d87edea65f797c543449a076491a03bb853b146 100644 (file)
@@ -44,7 +44,7 @@
 static int prepbinding(SOCPTR ***bindings,int argc,char *argv[])
 
 {
-#define OPEP    "moderec.c:prepbinding"
+#define OPEP    "modrec.c:prepbinding"
 
 *bindings=(SOCPTR **)0;
 for (int i=0;i<argc;i++) {
@@ -109,7 +109,7 @@ return rou_nbrlist(*bindings);
 static void docontact(SOCPTR *socptr,int pos) 
 
 {
-#define OPEP    "modrec.c:contact"
+#define OPEP    "modrec.c:docontact"
 #define TESTL   8
 
 CONTYP *contact;
@@ -137,13 +137,14 @@ while (proceed==true) {
     case 2      :       //do contact
       switch (eml_docontact(contact)) {
         case -1 :       //Signal received 
-          (void) rou_alert(0,"JMPDBG got sgnal within contact");
+          (void) rou_alert(0,"JMPDBG got signal within contact");
           break;
         case  0 :       //exit under timeout
           (void) rou_alert(0,"Contact with peer <%s> closed by timeout",
                               contact->peerip);
           break;
         default :       //exit under quit
+          (void) rou_alert(0,"JMPDBG exit under quit");
           break;
         }
       break;
@@ -248,7 +249,7 @@ while (proceed==true) {
 static void startwaiter(SOCPTR *socptr)
 
 {
-#define OPEP    "moderec.c:startwaiter"
+#define OPEP    "modrec.c:startwaiter"
 
 int phase;
 _Bool proceed;
@@ -372,5 +373,6 @@ while (proceed==true) {
     }
   phase++;
   }
+(void) rou_alert(0,"JMPDBG %s exiting",OPEP);
 #undef  OPEP
 }
index f484efc796f1ba98f97ddd7030b5323c8718ec18..7cedae95084e270779fd7b3773899d153d3b682d 100644 (file)
@@ -21,7 +21,7 @@
 
 //version definition 
 #define VERSION "0.6"
-#define RELEASE "14"
+#define RELEASE "15"
 
 //Public variables
 PUBLIC  int debug=0;            //debug level
index 1be98711e52f8d7b0e44b9dbf775ddfdd54adf12..18eec1532ed39179cc00cec743135ea1d489829a 100644 (file)
@@ -174,11 +174,13 @@ if (onoff==true) {
   (void) sigaction(SIGQUIT,newsa,olds[4]);
   (void) sigaction(SIGHUP,newsa,olds[5]);
   (void) sigaction(SIGALRM,newsa,olds[6]);
+  (void) sigaction(SIGPIPE,newsa,olds[6]);
   (void) free(newsa);
   }
 else {
   int i;
 
+  (void) sigaction(SIGPIPE,olds[6],(struct sigaction *)0);
   (void) sigaction(SIGALRM,olds[6],(struct sigaction *)0);
   (void) sigaction(SIGHUP,olds[5],(struct sigaction *)0);
   (void) sigaction(SIGQUIT,olds[4],(struct sigaction *)0);