/** * Funkcia syncProcess vytvara procesy a synchronizuje ich. * @param param Struktura s vlastnostami pre procesy. * @return Chybovy navrat funkcie. */ int syncProcess(TParams *param) { int error = EOK; // Premmena pre chybu pri zdielanej pamati. param->mainpid = getpid(); // Proces id hlavneho programu. setSignals(getpid()); // Zachytenie signalov. signal(SIGCHLD, SIG_IGN); // Ignorovanie sigchld a uvolnovanie procesov. // Inicializacia semaforov TMutx semaphores = {.mut0 = NULL, .mut1 = NULL, .mut2 = NULL ,.mut3 = NULL, .mut4 = NULL, .mut5 = NULL, .mut6 = NULL, .mut7 = NULL,}; if(initSemaphores(&semaphores) != EOK) { destroySemaphores(&semaphores); return ESEMAP; } g_mutxs = &semaphores; // Vytvorenie zdielanej pamate. TSmem *memory = createSharedMem(&error,param,"/tmp"); if(error) return ESHARED; g_mems = memory; g_shmid = param->sharedid; // Vytvorenie procesa holica. if((param->barberid = fork()) == -1) { destroySemaphores(&semaphores); unlinkSharedMem(memory,param->sharedid); return EFORK; } // Volanie holica. else if(param->barberid == 0) { syncBarber(memory, &semaphores, param); destroySemaphores(&semaphores); unlinkSharedMem(memory,param->sharedid); fclose(param->fw); exit(EXIT_SUCCESS); } // Vytvorenie procesov zakaznikov. else if(param->barberid > 0) { if(createCustomers(memory,param,&semaphores) == EFORK) { printECode(EFORK); kill(param->barberid, SIGUSR1); for(int i = 0; i < memory->created; i++) kill(memory->pids[0],SIGTERM); errorCleanAll(&semaphores,memory,param); } // Pockanie na proces barbra a uvolnenie zdielanej pamati. waitpid(param->barberid, NULL, 0); unlinkSharedMem(memory,param->sharedid); destroySemaphores(&semaphores); } return EOK; }
void CrashCleanup::removeObject( QObject *object ) { cObjects.removeOne( object ); if( !cObjects.count() ) { /* no one left, party's over, clean up */ setSignals( SIG_DFL ); } }
SettingsWidget::SettingsWidget(QWidget *parent) : QDialog(parent) { ui = new Ui::SettingsWidget(); ui->setupUi(this); loadSettings(); setSignals(); }
void CrashCleanup::addObject( QObject *object ) { if( !cObjects.size() ) { /* first object, so install signal handler */ setSignals( (__sighandler_t)(CrashCleanup::runCleanup) ); } if( !cObjects.contains( object ) ) { cObjects.prepend( object ); } }
/*send a new article*/ int *sendarticle_1_svc(sent_article *sa, struct svc_req *clrts) { setSignals(); struct paperitem *item; struct paperitem *prev; static int res; int artID = -1; int found = 0; prev = NULL; item = papers; while(item!=NULL) { artID = item->id; if(strcmp(item->author, sa->author) == 0 && strcmp(item->name, sa->name) == 0) { //found found = 1; //have to update free(item->data); item->data=malloc(sa->data.data_len); memcpy(item->data, sa->data.data_val, sa->data.data_len); item->dataSize = sa->data.data_len; res=artID; return &res; } prev = item; item = item->next; } item=malloc(sizeof(struct paperitem)); artID++; item->id = artID; strcpy(item->author, sa->author); strcpy(item->name, sa->name); item->data = malloc(sa->data.data_len); memcpy(item->data, sa->data.data_val, sa->data.data_len); item->dataSize = sa->data.data_len; item->next = NULL; if(papers==NULL){ papers=item; papers->next=NULL; }else{ prev->next=item; } res=artID; return &res; }
void init (void) { setSignals(); initscr(); cbreak(); noecho(); nonl(); idlok(stdscr, TRUE); keypad(stdscr, TRUE); initStack(); initMemory(); srand48(37); }
int init (int argc, char *argv[]) { if (BlockSize > MAX_BLOCK_SIZE) { return myError("Block size too big"); } NumRows = BlockSize / u8S_PER_ROW; setSignals(); initscr(); cbreak(); noecho(); nonl(); intrflush(stdscr, FALSE); //idlok(stdscr, TRUE); keypad(stdscr, TRUE); initStack(); initMemory(); Initialized = TRUE; return 0; }