Mercurial > urweb
diff src/c/http.c @ 859:60240acd15b9
Successfully starting FastCGI sessions with Apache
author | Adam Chlipala <adamc@hcoop.net> |
---|---|
date | Sat, 27 Jun 2009 12:38:23 -0400 |
parents | 86ec89baee01 |
children | 305bc0a431de |
line wrap: on
line diff
--- a/src/c/http.c Sat Jun 27 10:50:45 2009 -0400 +++ b/src/c/http.c Sat Jun 27 12:38:23 2009 -0400 @@ -14,45 +14,10 @@ #include "urweb.h" #include "request.h" +#include "queue.h" int uw_backlog = 10; -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; - - front = front->next; - if (!front) - back = NULL; - - return ret; -} - -static pthread_mutex_t queue_mutex = PTHREAD_MUTEX_INITIALIZER; -static pthread_cond_t queue_cond = PTHREAD_COND_INITIALIZER; - static char *get_header(void *data, const char *h) { char *s = data; int len = strlen(h); @@ -103,13 +68,7 @@ while (1) { char *back = buf; - int sock; - - pthread_mutex_lock(&queue_mutex); - while (empty()) - pthread_cond_wait(&queue_cond, &queue_mutex); - sock = dequeue(); - pthread_mutex_unlock(&queue_mutex); + int sock = uw_dequeue(); printf("Handling connection with thread #%d.\n", me); @@ -367,9 +326,6 @@ printf("Accepted connection.\n"); - pthread_mutex_lock(&queue_mutex); - enqueue(new_fd); - pthread_cond_broadcast(&queue_cond); - pthread_mutex_unlock(&queue_mutex); + uw_enqueue(new_fd); } }