void pbrtCleanup() { // API Cleanup if (currentApiState == APIState::Uninitialized) Error("pbrtCleanup() called without pbrtInit()."); else if (currentApiState == APIState::WorldBlock) Error("pbrtCleanup() called while inside world block."); currentApiState = APIState::Uninitialized; TerminateWorkerThreads(); renderOptions.reset(nullptr); }
static int ProcessMsg (SOCKET s, const struct S_ConsoleMsg *pmsg) { struct LL_TftpInfo *pTftp; int uServices; LogToMonitor ("TFTPd console receive msg %d\n", pmsg->type); switch (pmsg->type) { case C_CONS_KILL_TRF : LOG (1, "transfer %d must be killed", pmsg->u.kill.dwTransferId); for ( pTftp=pTftpFirst ; pTftp!=NULL && pTftp->tm.dwTransferId != pmsg->u.kill.dwTransferId ; pTftp = pTftp->next ); if (pTftp != NULL) { nak (pTftp, ECANCELLED); pTftp->st.ret_code=TFTP_TRF_STOPPED; } break; case C_TFTP_TERMINATE : LogToMonitor ("terminating TFTP service\n"); tThreads[TH_TFTP].gRunning = FALSE; WakeUpThread (TH_TFTP); break; case C_DHCP_TERMINATE : LogToMonitor ("terminating DHCP service\n"); tThreads[TH_DHCP].gRunning = FALSE; // wake up DHCP thread WakeUpThread (TH_DHCP); break; case C_TERMINATE : LogToMonitor ("stopping services\n"); TerminateWorkerThreads (FALSE); // keep management threads break; case C_SUSPEND : LogToMonitor ("suspending services\n"); TerminateWorkerThreads (TRUE); // keep management threads break; case C_START : LogToMonitor ("starting services\n"); StartMultiWorkerThreads (TRUE); break; case C_DHCP_RRQ_SETTINGS : LogToMonitor ("sending DHCP settings\n"); SendMsg (s, C_DHCP_RPLY_SETTINGS, & sParamDHCP, sizeof sParamDHCP); break; case C_TFTP_RRQ_SETTINGS : LogToMonitor ("sending TFTP settings\n"); SendMsg (s, C_TFTP_RPLY_SETTINGS, & sSettings, sizeof sSettings); break; case C_DHCP_WRQ_SETTINGS : LogToMonitor ("storing new DHCP settings\n"); DHCPSaveConfig ( & pmsg->u.dhcp_settings ); break; case C_TFTP_WRQ_SETTINGS : LogToMonitor ("storing new TFTP settings\n"); {static struct S_RestartTable sRestart; sRestart.newservices = pmsg->u.tftp_settings.uServices; sRestart.oldservices = sSettings.uServices; sRestart.flapservices = 0; if ( sSettings.Port != pmsg->u.tftp_settings.Port || lstrcmp (sSettings.szTftpLocalIP, pmsg->u.tftp_settings.szTftpLocalIP )!=0 ) sRestart.flapservices |= TFTPD32_TFTP_SERVER; // restart syslog if its settings log has changed if ( sSettings.uServices & TFTPD32_SYSLOG_SERVER && ( sSettings.bSyslogPipe != pmsg->u.tftp_settings.bSyslogPipe || strcmp(sSettings.szSyslogFile,pmsg->u.tftp_settings.szSyslogFile)!= 0 ) ) sRestart.flapservices |= TFTPD32_SYSLOG_SERVER; sSettings = pmsg->u.tftp_settings; if ( IsValidDirectory ( pmsg->u.tftp_settings.szBaseDirectory ) ) lstrcpyn ( sSettings.szWorkingDirectory, pmsg->u.tftp_settings.szBaseDirectory, sizeof sSettings.szWorkingDirectory ); _beginthread ( Tftpd32UpdateServices, 0, (void *) & sRestart ); Tftpd32SaveSettings (); } break; case C_TFTP_RESTORE_DEFAULT_SETTINGS : LogToMonitor ("restore default settings\n"); Tftpd32DestroySettings (); break; case C_TFTP_CHG_WORKING_DIR : LogToMonitor ("changing working directory to <%s>\n", pmsg->u.working_dir); if ( IsValidDirectory ( pmsg->u.working_dir ) ) lstrcpyn ( sSettings.szWorkingDirectory, pmsg->u.working_dir, sizeof sSettings.szWorkingDirectory ); break; case C_RRQ_WORKING_DIR : LogToMonitor ("sending working directory <%s>\n", sSettings.szWorkingDirectory); SendMsg (s, C_REPLY_WORKING_DIR, sSettings.szWorkingDirectory, 1 + lstrlen (sSettings.szWorkingDirectory) ); break; case C_DELETE_ASSIGNATION : LogToMonitor ("deleting DHCP entry %X\n", pmsg->u.del_lease.ip); { struct in_addr addr; BOOL dummy; addr.s_addr = pmsg->u.del_lease.ip; DHCPDestroyItem ( DHCPSearchByIP ( & addr, &dummy ) ); } break; case C_RRQ_GET_SERVICES : LogToMonitor ("sending running services\n"); uServices = GetRunningThreads (); SendMsg (s, C_REPLY_GET_SERVICES, & uServices, sizeof uServices ); break; case C_RRQ_GET_INTERFACES : LogToMonitor ("sending IP interfaces"); AnswerIPList (); break; case C_RRQ_DIRECTORY_CONTENT : LogToMonitor ("sending Directory content"); SendDirectoryContent (); break; case C_TFTP_GET_FULL_STAT : LogToMonitor ("sending Directory content"); ConsoleTftpGetStatistics (); break; default : LogToMonitor ("Service received unknown message %d\n", pmsg->type); break; } return 1; } // ReadMsg
void DptCleanup() { TextureSystem::Destroy(); TerminateWorkerThreads(); }