static void cleanupDCOP(int dont_kill_dcop, int wait_for_exit) { FILE *f; char dcop_file[2048 + 1]; char dcop_file_old[2048 + 1]; char buffer[2048 + 1]; pid_t pid = 0; getDCOPFile(dcop_file, dcop_file_old, 2048); if(strlen(dcop_file) == 0) return; f = fopen(dcop_file, "r"); unlink(dcop_file); /* Clean up .DCOPserver file */ unlink(dcop_file_old); if(!f) return; while(!feof(f)) { if(!fgets(buffer, 2048, f)) break; pid = strtol(buffer, NULL, 10); if(pid) break; cleanupDCOPsocket(buffer); } fclose(f); if(!dont_kill_dcop && pid) kill(pid, SIGTERM); while(wait_for_exit && (kill(pid, 0) == 0)) { struct timeval tv; tv.tv_sec = 0; tv.tv_usec = 100000; select(0, 0, 0, 0, &tv); } }
static void cleanupDCOP(int dont_kill_dcop, int wait_for_exit) { TQCString host; TQCString strDCOPServer = DCOPClient::dcopServerFile(host); if(strDCOPServer.isEmpty()) { printf("no server file\n"); return; } printf("server file %s\n",(const char *)strDCOPServer); pid_t pid = 0; TQFile f(strDCOPServer); if(f.open(IO_ReadOnly)) { TQString str; while(f.readLine(str,2048)) { pid = str.toULong(); if (pid) break; cleanupDCOPsocket(str.ascii()); } } f.close(); /* Clean up .DCOPserver file */ TQFile::remove(strDCOPServer); printf("remove server file %s\n",(const char *)strDCOPServer); if(pid) { if(!dont_kill_dcop) { #ifdef Q_OS_WIN killDCOPWin(pid); #else kill(pid, SIGTERM); #endif } else { #ifdef Q_OS_WIN killDCOPWin(pid); #endif } } #ifdef Q_OS_WIN if(wait_for_exit) { HANDLE hProcess = OpenProcess(SYNCHRONIZE,FALSE,(DWORD)pid); if(hProcess) { WaitForSingleObject(hProcess,INFINITE); CloseHandle(hProcess); } } #else while(wait_for_exit && (kill(pid, 0) == 0)) { struct timeval tv; tv.tv_sec = 0; tv.tv_usec = 100000; select(0,0,0,0,&tv); } #endif }