/* * called at exit */ static void cleanup(void) { unotice("Exiting"); if(!intr) { /* We are not in the interrupt context */ if(md5ctxp != NULL) { free_MD5_CTX(md5ctxp); } if(pq != NULL) { off_t highwater = 0; size_t maxregions = 0; (void) pq_highwater(pq, &highwater, &maxregions); (void) pq_close(pq); pq = NULL; if(feed_close) (*feed_close)(ifd); ifd = -1; unotice(" Queue usage (bytes):%8ld", (long)highwater); unotice(" (nregions):%8ld", (long)maxregions); unotice(" Duplicates rejected:%8lu", ndups); } (*prod_stats)(); (*feed_stats)(); } (void) closeulog(); }
/* * Called at exit. * This callback routine registered by atexit(). */ static void cleanup(void) { unotice("exiting"); /* TODO: sign off */ (void) closeulog(); }
void cleanup(void) { if(clnt != NULL) { clnt_destroy(clnt); } (void) closeulog(); }
void cleanup(void) { unotice("Exiting"); if(pq && !intr) (void)pq_close(pq); (void) closeulog(); }
void cleanup(void) { if (pq) { #if !USE_MMAP if (!pqeIsNone(pqeIndex)) (void)pqe_discard(pq, pqeIndex); #endif (void) pq_close(pq); pq = NULL; } (void)closeulog(); }
void cleanup(void) { unotice("Exiting"); if(act_pid != -1) { (void)signal(SIGCHLD, SIG_IGN); kill(act_pid, SIGTERM); (void) reap_act(0); } if(opq != NULL) { off_t highwater = 0; size_t maxregions = 0; (void) pq_highwater(opq, &highwater, &maxregions); (void) pq_close(opq); opq = NULL; unotice(" Queue usage (bytes):%8ld", (long)highwater); unotice(" (nregions):%8ld", (long)maxregions); } if(pq != NULL) { (void) pq_close(pq); pq = NULL; } dump_stats(); (void) closeulog(); }
/* * Called at exit. * This callback routine registered by atexit(). */ static void cleanup( void) { const char* const pqfname = getQueuePath(); unotice("Exiting"); lcf_savePreviousProdInfo(); free_remote_clss(); /* * Ensure release of COMINGSOON-reserved space in product-queue. */ clr_pip_5(); down6_destroy(); /* * Close product-queue. */ if (pq) { (void) pq_close(pq); pq = NULL; } /* * Ensure that this process has no entry in the upstream LDM database and * that the database is closed. */ (void) uldb_remove(getpid()); (void) uldb_close(); log_clear(); if (getpid() == getpgrp()) { /* * This process is the process group leader (i.e., the top-level * LDM server). */ if (portIsMapped) { int vers; /* * Superuser privileges might be required to unmap the * port on which the LDM is listening. */ rootpriv(); for (vers = MIN_LDM_VERSION; vers <= MAX_LDM_VERSION; vers++) { if (!pmap_unset(LDMPROG, vers)) uerror("pmap_unset(LDMPROG %lu, LDMVERS %lu) " "failed", LDMPROG, vers); else portIsMapped = 0; } unpriv(); } /* * Terminate all child processes. */ { /* * Ignore the signal I'm about to send my process group. */ struct sigaction sigact; (void) sigemptyset(&sigact.sa_mask); sigact.sa_flags = 0; sigact.sa_handler = SIG_IGN; (void) sigaction(SIGTERM, &sigact, NULL ); } /* * Signal my process group. */ unotice("Terminating process group"); (void) kill(0, SIGTERM); while (reap(-1, 0) > 0) ; /*empty*/ /* * Delete the upstream LDM database. */ (void) uldb_delete(NULL); #if WANT_MULTICAST /* * Destroy the multicast LDM sender map. */ msm_destroy(); #endif } /* * Free access-control-list resources. */ lcf_free(); /* * Close registry. */ if (reg_close()) log_log(LOG_ERR); /* * Terminate logging. */ (void) closeulog(); }
static void cleanup(void) { unotice("Exiting"); (void) closeulog(); }