X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=src%2Frmr%2Fsi%2Fsrc%2Fsi95%2Fsishutdown.c;h=4ff1e8f894c5cd24e44a5ba8565ba312dfd70c01;hb=fa454008020483ac35e1d20300cddfe877d8dd6d;hp=c76bc94734a94b94b99761f29c1a3e9dc19d8320;hpb=5861625ff2eaf1bd3a69ce488bd7d14f7b402432;p=ric-plt%2Flib%2Frmr.git diff --git a/src/rmr/si/src/si95/sishutdown.c b/src/rmr/si/src/si95/sishutdown.c index c76bc94..4ff1e8f 100644 --- a/src/rmr/si/src/si95/sishutdown.c +++ b/src/rmr/si/src/si95/sishutdown.c @@ -22,26 +22,45 @@ ****************************************************************************** * * Mnemonic: SIshutdown -* Abstract: This routine will ensure that all tp blocks have been closed -* with the transport provider and removed from the list. The -* shutdown flag is set in addition. -* Parms: gptr - pointer to the ginfo structure (SIHANDLE) -* Retrns: Nothing. +* Abstract: Shutdown and abort functions. +* * Date: 23 March 1995 * Author: E. Scott Daniels * ***************************************************************************** */ -#include "sisetup.h" // get includes and defines +#include "sisetup.h" // get includes and defines + +/* +*/ +static void sishutdown( struct ginfo_blk *gptr, int flags ) { + struct tp_blk* tpb; -extern void SIshutdown( struct ginfo_blk *gptr ) { if( gptr != NULL && gptr->magicnum == MAGICNUM ) { - gptr->flags |= GIF_SHUTDOWN; // signal shutdown - while( gptr->tplist != NULL ) + gptr->flags |= GIF_SHUTDOWN; // signal shutdown + for( tpb = gptr->tplist; tpb != NULL; tpb = tpb->next ) { - gptr->tplist->flags |= TPF_UNBIND; // force unbind on session - SIterm( gptr, gptr->tplist ); // and drop the session + tpb->flags |= (TPF_UNBIND | flags); // force unbind on session and set caller flags + SIterm( gptr, tpb ); // term marks ok to delete but does NOT remove it } } -} +} + +/* + Run the list of known transport sessions and close them gracefully. This + will result in time-waits which might prevent the application from + restarting immediately as the listen port(s) might not be usable. +*/ +extern void SIshutdown( struct ginfo_blk *gptr ) { + sishutdown( gptr, 0 ); +} + +/* + Run the list of known transport sessions and close them by aborting + (resetting the connection). This can result in buffered, but untransmitted, + data from being lost; the risk should be known by the caller. +*/ +extern void SIabort( struct ginfo_blk *gptr ) { + sishutdown( gptr, TPF_ABORT ); +}