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); } }
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; }