X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Frmr%2Fsi%2Fsrc%2Fsi95%2Fsipoll.c;h=c47fb97eb2a00a899cacdb567e4bd5e366bfaa67;hb=708ebac12488fe6fb204ff2861fc0045afb73b78;hp=df71eaea377a03cf133be5d1c23d9a84ee6cb1e0;hpb=ec88d3c0563eeb6ae5f73427edb0b3c4d7acf299;p=ric-plt%2Flib%2Frmr.git diff --git a/src/rmr/si/src/si95/sipoll.c b/src/rmr/si/src/si95/sipoll.c index df71eae..c47fb97 100644 --- a/src/rmr/si/src/si95/sipoll.c +++ b/src/rmr/si/src/si95/sipoll.c @@ -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 }