Esempio n. 1
0
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;
}
Esempio n. 2
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;
}
Esempio n. 3
0
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;
}