/*---------------------------------------------------------------------*/ BOOL ArchiveClose(H_ARCHIVE harchive) { NODE *node; STREAM *stream; if (!ValidateHandle(harchive)) return (FALSE); _archive[harchive].last_error = ARC_NO_ERROR; _archive_error = ARC_NO_ERROR; ArchiveLog(ARC_LOG_VERBOSE, "Close archive: %s", _archive[harchive].path); /* Close all open event files on archive... */ if ((node = FirstNode(&_archive[harchive].streams))) { do { stream = (STREAM *) node->data; if (_archive[harchive].access == ARC_WRITE) CloseEventFileAndRename(harchive, stream); else CloseEventFile(stream); } while ((node = NextNode(node)) != NULL); } /* If open for write... */ if (_archive[harchive].access == ARC_WRITE) { MUTEX_LOCK(&_archive[harchive].purge.mutex); if(_archive[harchive].purge.active ) { _archive[harchive].purge.stop = TRUE; MUTEX_UNLOCK(&_archive[harchive].purge.mutex); ArchiveLog(ARC_LOG_VERBOSE, "Stopping purge thread"); SEM_POST(&_archive[harchive].purge.semaphore); THREAD_JOIN(&_archive[harchive].purge.thread_id); } else MUTEX_UNLOCK(&_archive[harchive].purge.mutex); /* Mark as closed and write state to disk */ _archive[harchive].state.write = FALSE; if (!WriteState(harchive)) return (FALSE); } /* Close the state file */ if (!FileClose(_archive[harchive].file)) { _archive[harchive].last_error = ARC_FILE_IO_ERROR; return (FALSE); } _n_archives--; /* Clear state */ MUTEX_DESTROY(&_archive[harchive].mutex); DestroyList(&_archive[harchive].streams); DestroyPurge(&_archive[harchive].purge); InitArchive(harchive); return (TRUE); }
void initdatabases(void) { if (!init) { clr_index(); working(1, 0, 0); set_color(WHITE, BLACK); ftnd_mvprintw( 5, 6, " INIT DATABASES"); IsDoing("Init Databases"); } config_read(); InitArchive(); InitDomain(); InitFilearea(); InitFilefind(); InitFGroup(); InitFidonetdb(); InitFidonet(); InitHatch(); InitLanguage(); InitLimits(); InitMagics(); InitMsgarea(); InitMGroup(); InitModem(); InitNewfiles(); InitNGroup(); InitNodes(); InitOneline(); InitProtocol(); InitService(); InitTicarea(); InitTtyinfo(); InitUsers(); InitVirus(); InitRoute(); InitFDB(); InitIBC(); if (!init) { clr_index(); } }