Exemple #1
0
/**
 * 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;
}
Exemple #2
0
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();
}
Exemple #4
0
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;
}
Exemple #6
0
void init (void)
{
	setSignals();

	initscr();
	cbreak();
	noecho();
	nonl();
	idlok(stdscr, TRUE);
	keypad(stdscr, TRUE);

	initStack();
	initMemory();

	srand48(37);
}
Exemple #7
0
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;
}