Mercurial > urweb
view src/c/queue.c @ 1909:659d1f4e95bf
make dist: Use fewer wildcards
The remaining ones only work by accident:
http://www.gnu.org/software/automake/manual/html_node/Wildcards.html
and they have some practical problems too (we don?t really want to
distribute include/urweb/config.h or src/config.sml), but this is
enough for now to pass ?make distcheck? as long as we don?t run it
from a separate build directory.
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
---
Makefile.am | 6 +++---
src/c/Makefile.am | 2 +-
2 files changed, 4 insertions(+), 4 deletions(-)
author | Anders Kaseorg <andersk@mit.edu> |
---|---|
date | Fri, 22 Nov 2013 09:36:14 -0500 |
parents | 452b14d88a10 |
children |
line wrap: on
line source
#include "config.h" #include <stdlib.h> #include <pthread.h> typedef struct node { int fd; struct node *next; } *node; static node front = NULL, back = NULL; static int empty() { return front == NULL; } static void enqueue(int fd) { node n = malloc(sizeof(struct node)); n->fd = fd; n->next = NULL; if (back) back->next = n; else front = n; back = n; } static int dequeue() { int ret = front->fd; node n = front->next; free(front); front = n; if (!front) back = NULL; return ret; } static pthread_mutex_t queue_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_cond_t queue_cond = PTHREAD_COND_INITIALIZER; int uw_dequeue() { int sock; pthread_mutex_lock(&queue_mutex); while (empty()) pthread_cond_wait(&queue_cond, &queue_mutex); sock = dequeue(); pthread_mutex_unlock(&queue_mutex); return sock; } void uw_enqueue(int new_fd) { pthread_mutex_lock(&queue_mutex); enqueue(new_fd); pthread_cond_broadcast(&queue_cond); pthread_mutex_unlock(&queue_mutex); }