0
@@ -138,6 +138,7 @@ static void dispatch(ebb_client *client)
0
+ client->in_use = TRUE;
0
server->request_cb(client, server->request_cb_data);
0
@@ -232,6 +233,7 @@ static void on_readable(struct ev_loop *loop, ev_io *watcher, int revents)
0
ebb_client *client = (ebb_client*)(watcher->data);
0
+ assert(client->in_use == FALSE);
0
assert(client->server->open);
0
assert(client->server->loop == loop);
0
@@ -282,6 +284,7 @@ error:
0
static client_init(ebb_server *server, ebb_client *client)
0
+ assert(client->in_use == FALSE);
0
/* does ragel fuck up if request buffer isn't null? */
0
for(i=0; i< EBB_BUFFERSIZE; i++)
0
@@ -353,7 +356,7 @@ static void on_request(struct ev_loop *loop, ev_io *watcher, int revents)
0
/* Get next availible peer */
0
for(i=0; i < EBB_MAX_CLIENTS; i++)
0
- if(!server->clients[i].open) {
0
+ if(!server->clients[i].in_use && !server->clients[i].open) {
0
client = &(server->clients[i]);
0
@@ -387,8 +390,11 @@ void ebb_server_init( ebb_server *server
0
- for(i=0; i < EBB_MAX_CLIENTS; i++)
0
+ for(i=0; i < EBB_MAX_CLIENTS; i++) {
0
server->clients[i].response_buffer = g_string_new("");
0
+ server->clients[i].open = FALSE;
0
+ server->clients[i].in_use = FALSE;
0
server->request_cb = request_cb;
0
server->request_cb_data = request_cb_data;
0
@@ -509,6 +515,13 @@ int ebb_server_listen_on_socket(ebb_server *server, const char *socketpath)
0
+void ebb_client_release(ebb_client *client)
0
+ assert(client->in_use);
0
+ client->in_use = FALSE;
0
void ebb_client_close(ebb_client *client)
0
@@ -580,8 +593,8 @@ static void on_client_writable(struct ev_loop *loop, ev_io *watcher, int revents
0
void ebb_client_write_status(ebb_client *client, int status, const char *human_status)
0
+ assert(client->in_use);
0
+ if(!client->open) return;
0
assert(client->status_written == FALSE);
0
g_string_append_printf( client->response_buffer
0
@@ -593,8 +606,8 @@ void ebb_client_write_status(ebb_client *client, int status, const char *human_s
0
void ebb_client_write_header(ebb_client *client, const char *field, const char *value)
0
+ assert(client->in_use);
0
+ if(!client->open) return;
0
assert(client->status_written == TRUE);
0
assert(client->headers_written == FALSE);
0
g_string_append_printf( client->response_buffer
0
@@ -606,8 +619,8 @@ void ebb_client_write_header(ebb_client *client, const char *field, const char *
0
void ebb_client_write(ebb_client *client, const char *data, int length)
0
+ assert(client->in_use);
0
+ if(!client->open) return;
0
g_string_append_len(client->response_buffer, data, length);
0
if(client->began_transmission) {
0
/* restart the watcher if we're streaming */
0
@@ -618,8 +631,8 @@ void ebb_client_write(ebb_client *client, const char *data, int length)
0
void ebb_client_begin_transmission(ebb_client *client)
0
+ assert(client->in_use);
0
+ if(!client->open) return;
0
assert(FALSE == ev_is_active(&client->write_watcher));
0
/* assure the socket is still in non-blocking mode */
0
@@ -648,9 +661,8 @@ int ebb_client_read(ebb_client *client, char *buffer, int length)
0
+ assert(client->in_use);
0
+ if(!client->open) return -1;
0
assert(client_finished_parsing);
0
if(client->upload_file) {
Comments
No one has commented yet.