Пример #1
0
void networkinterface_wantsSend(NetworkInterface* interface, Socket* socket) {
	MAGIC_ASSERT(interface);

	/* track the new socket for sending if not already tracking */
	switch(interface->qdisc) {
		case NIQ_RR: {
			if(!g_queue_find(interface->rrQueue, socket)) {
				descriptor_ref(socket);
				g_queue_push_tail(interface->rrQueue, socket);
			}
			break;
		}
		case NIQ_FIFO:
		default: {
			if(!priorityqueue_find(interface->fifoQueue, socket)) {
				descriptor_ref(socket);
				priorityqueue_push(interface->fifoQueue, socket);
			}
			break;
		}
	}

	/* trigger a send if we are currently idle */
	if(!(interface->flags & NIF_SENDING)) {
		_networkinterface_scheduleNextSend(interface);
	}
}
Пример #2
0
gpointer asyncpriorityqueue_find(AsyncPriorityQueue *q, gpointer data) {
	g_assert(q);
	g_mutex_lock(&(q->lock));
	gpointer returnData = priorityqueue_find(q->pq, data);
	g_mutex_unlock(&(q->lock));
	return returnData;
}