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=refs%2Fchanges%2F15%2F5115%2F2;hp=95b6f25d54aecee28dbab5030e8d965920a18675;hpb=ec88d3c0563eeb6ae5f73427edb0b3c4d7acf299;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 95b6f25..4ff1e8f 100644 --- a/src/rmr/si/src/si95/sishutdown.c +++ b/src/rmr/si/src/si95/sishutdown.c @@ -22,28 +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 ) { - gptr->sierr = SI_ERR_HANDLE; 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 - } // end while - gptr->sierr = 0; + 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 ); +}