diff options
author | Luo Jinghua <sunmoon1997@gmail.com> | 2009-09-02 11:49:55 +0800 |
---|---|---|
committer | Luo Jinghua <sunmoon1997@gmail.com> | 2009-09-02 11:49:55 +0800 |
commit | 91745c8333720f968dfe3ed74b30886429fec3e4 (patch) | |
tree | e1b61d70dcc5f2881ae13e60e9c6544732c414aa | |
parent | 3b5a85363fec4bb8dfa2e95f8e5ce9b999fa1011 (diff) |
wrapper: cleanup server and fix some valgrind warnings
-rw-r--r-- | wrapper/ppswrapper-server.c | 41 |
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); |