int queue_enqueue(Queue * q, void * data) { if(!queue_isfull(q) && !queue_contains(q, data)) { q->data[q->write_ptr++] = (int) data; if(q->write_ptr == q->size){ q->write_ptr = 0; } q->count++; return 1; } return 0; }
/* Uebernehme die neuen Angaben fuer die Weiche, einige wenige Pruefungen */ int enqueueGA(bus_t busnumber, int addr, int port, int action, long int activetime) { int result; struct timeval akt_time; int number_ga = get_number_ga(busnumber); if ((addr > 0) && (addr <= number_ga)) { if (queue_isfull(busnumber)) { syslog_bus(busnumber, DBG_WARN, "GA Command Queue full"); return SRCP_TEMPORARILYPROHIBITED; } result = pthread_mutex_lock(&queue_mutex[busnumber]); if (result != 0) { syslog_bus(busnumber, DBG_ERROR, "pthread_mutex_lock() failed: %s (errno = %d).", strerror(result), result); } queue[busnumber][in[busnumber]].protocol = ga[busnumber].gastate[addr].protocol; queue[busnumber][in[busnumber]].type = ga[busnumber].gastate[addr].type; queue[busnumber][in[busnumber]].action = action; queue[busnumber][in[busnumber]].port = port; queue[busnumber][in[busnumber]].activetime = activetime; gettimeofday(&akt_time, NULL); queue[busnumber][in[busnumber]].tv[port] = akt_time; queue[busnumber][in[busnumber]].id = addr; in[busnumber]++; if (in[busnumber] == QUEUELEN) in[busnumber] = 0; result = pthread_mutex_unlock(&queue_mutex[busnumber]); if (result != 0) { syslog_bus(busnumber, DBG_ERROR, "pthread_mutex_unlock() failed: %s (errno = %d).", strerror(result), result); } /* Restart thread to send GL command */ resume_bus_thread(busnumber); } else { return SRCP_WRONGVALUE; } return SRCP_OK; }
int queue_enqueue(queue_t *queue, int value) { qnode_t *node = NULL; if (queue_isfull(queue)) return -1; node = create_qnode(value); queue->tail->next = node; queue->tail = node; queue->clen ++; return 0; }