summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuo Jinghua <sunmoon1997@gmail.com>2009-09-02 11:49:55 +0800
committerLuo Jinghua <sunmoon1997@gmail.com>2009-09-02 11:49:55 +0800
commit91745c8333720f968dfe3ed74b30886429fec3e4 (patch)
treee1b61d70dcc5f2881ae13e60e9c6544732c414aa
parent3b5a85363fec4bb8dfa2e95f8e5ce9b999fa1011 (diff)
wrapper: cleanup server and fix some valgrind warnings
-rw-r--r--wrapper/ppswrapper-server.c41
1 files changed, 28 insertions, 13 deletions
diff --git a/wrapper/ppswrapper-server.c b/wrapper/ppswrapper-server.c
index be2f683..1cdfa5a 100644
--- a/wrapper/ppswrapper-server.c
+++ b/wrapper/ppswrapper-server.c
@@ -93,7 +93,8 @@ ppsw_server_destroy(ppsw_t* super)
if (!self)
return;
- close (self->srv_sock);
+ if (self->srv_sock >= 0)
+ close (self->srv_sock);
close (self->base.sock);
pthread_mutex_destroy (&self->mutex);
pthread_mutex_destroy (&self->bufmutex);
@@ -134,8 +135,8 @@ ppsw_server_listen(ppsw_t* super,
}
static ppsw_event_buf_t*
-ppsw_get_event_buf(ppsw_server_t* self,
- int index)
+ppsw_server_get_event_buf(ppsw_server_t* self,
+ int index)
{
ppsw_event_buf_t* buf;
@@ -163,8 +164,8 @@ ppsw_get_event_buf(ppsw_server_t* self,
}
static void
-ppsw_remove_event_buf(ppsw_server_t* self,
- int index)
+ppsw_server_remove_event_buf(ppsw_server_t* self,
+ int index)
{
ppsw_event_buf_t* buf, *prev = NULL;
@@ -184,14 +185,14 @@ ppsw_remove_event_buf(ppsw_server_t* self,
}
static void
-ppsw_push_event(ppsw_server_t* self,
- int index, pps_event* event)
+ppsw_server_push_event(ppsw_server_t* self,
+ int index, pps_event* event)
{
ppsw_event_buf_t* buf;
pthread_mutex_lock(&server->bufmutex);
- buf = ppsw_get_event_buf(self, index);
+ buf = ppsw_server_get_event_buf(self, index);
if (buf && buf->rd_pos != (buf->wr_pos + 1) % (PPSW_EVTBUF_SZ + 1)) {
buf->events[buf->wr_pos++] = *event;
buf->wr_pos %= (PPSW_EVTBUF_SZ + 1);
@@ -201,8 +202,8 @@ ppsw_push_event(ppsw_server_t* self,
}
static int
-ppsw_pop_event(ppsw_server_t* self,
- int* index, pps_event* event)
+ppsw_server_pop_event(ppsw_server_t* self,
+ int* index, pps_event* event)
{
int ret = 0;
ppsw_event_buf_t* buf;
@@ -227,10 +228,23 @@ ppsw_pop_event(ppsw_server_t* self,
}
static int
+ppsw_server_clear_event_bufs(ppsw_server_t* self)
+{
+ ppsw_event_buf_t* buf, *next;
+
+ for (buf = self->bufs; buf; buf = next) {
+ next = buf->next;
+ free (buf);
+ }
+
+ self->bufs = NULL;
+}
+
+static int
ppsw_callback(int index, pps_event event)
{
if (server)
- ppsw_push_event(server, index, &event);
+ ppsw_server_push_event(server, index, &event);
return 0;
}
@@ -683,7 +697,7 @@ process_remove_item(ppsw_server_t* self,
ret = ppsvod_remove_item(fd);
- ppsw_remove_event_buf(self, fd);
+ ppsw_server_remove_event_buf(self, fd);
printf ("result: %d\n", ret);
return send_reply(self, msg->seq, ret);
@@ -854,7 +868,7 @@ process_get_event(ppsw_server_t* self,
//printf ("get_event()\n");
- if (!ppsw_pop_event(self, &index, &event))
+ if (!ppsw_server_pop_event(self, &index, &event))
return send_event_reply (self, msg->seq, 0, NULL);
return send_event_reply (self, msg->seq, index, &event);
}
@@ -1232,6 +1246,7 @@ ppsw_server_run(ppsw_t* super, int infinit)
self->play_quit = 1;
pthread_join (play_thread, NULL);
+ ppsw_server_clear_event_bufs (self);
ppsw_server_clear_play_requests (self);
close(self->base.sock);