Address code analysis issues
[ric-plt/lib/rmr.git] / src / rmr / si / src / si95 / sipoll.c
index df71eae..c47fb97 100644 (file)
@@ -59,14 +59,10 @@ extern int SIpoll( struct ginfo_blk *gptr, int msdelay )
  struct timeval  delay;        //  delay to use on select call
  struct sockaddr *uaddr;       //  pointer to udp address
 
- gptr->sierr = SI_ERR_SHUTD;
-
  if( gptr->flags & GIF_SHUTDOWN )     //  cannot do if we should shutdown
   return( SI_ERROR );                    //  so just get out
 
 
- gptr->sierr = SI_ERR_HANDLE;
-
  if( gptr->magicnum != MAGICNUM )     //  if not a valid ginfo block
   return( SI_ERROR );
 
@@ -125,8 +121,9 @@ extern int SIpoll( struct ginfo_blk *gptr, int msdelay )
 
      // for( tpptr = gptr->tplist; tpptr != NULL; tpptr = tpptr->next )
      for( tpptr = gptr->tplist; tpptr != NULL; tpptr = nextone )
-      {
-       nextone = tpptr->next;                                  //  prevent coredump if we delete the session
+       tpptr = gptr->tplist; 
+       while( tpptr != NULL ) {
+               nextone = tpptr->next;                                  //  allow for a delete in loop
 
        if( tpptr->squeue != NULL && (FD_ISSET( tpptr->fd, &gptr->writefds )) )
         SIsend( gptr, tpptr );              //  send if clear to send
@@ -156,7 +153,7 @@ extern int SIpoll( struct ginfo_blk *gptr, int msdelay )
                 SIaddress( uaddr, (void **) &buf, AC_TODOT );
                 status = (*cbptr)( gptr->cbtab[SI_CB_RDATA].cbdata, gptr->rbuf, status, buf );
                 SIcbstat( gptr, status, SI_CB_RDATA );    //  handle status
-               free( buf );
+                               free( buf );
                }                              //  end if call back was defined
              }                                //  end if status was ok
             free( uaddr );
@@ -184,13 +181,14 @@ extern int SIpoll( struct ginfo_blk *gptr, int msdelay )
             }
            }                                                //  end tcp read
         }                    //  end if event on this fd
+
+               tpptr = nextone;
       }                      //  end for each fd in the list
     }                        //  end if not in shutdown
 
 
  if( gptr->flags & GIF_SHUTDOWN )      //  we need to stop for some reason
   {
-   gptr->sierr = SI_ERR_SHUTD;        //  indicate error exit status
    status = SI_ERROR;                //  status should indicate to user to die
    SIshutdown( gptr );            //  clean things up
   }