summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuo Jinghua <sunmoon1997@gmail.com>2009-09-11 23:26:56 +0800
committerLuo Jinghua <sunmoon1997@gmail.com>2009-09-11 23:26:56 +0800
commitcb82f0032d22ce8ff75b456929361eee56cdbe3c (patch)
tree714b20d97de0cd081ee839c223995dbe3b4b160c
parent02c174375d452f6da3ccbe22680de2b184e1680a (diff)
wrapper: cleanup libpps on closing client
-rw-r--r--wrapper/ppswrapper-server.c12
-rw-r--r--wrapper/ppswrapper.h2
2 files changed, 14 insertions, 0 deletions
diff --git a/wrapper/ppswrapper-server.c b/wrapper/ppswrapper-server.c
index 2ac70ae..8304701 100644
--- a/wrapper/ppswrapper-server.c
+++ b/wrapper/ppswrapper-server.c
@@ -75,6 +75,7 @@ ppsw_server_create(int fd, int port)
self->bufs = NULL;
self->play_reqs = NULL;
+ self->created = 0;
server = self;
return &self->base;
@@ -628,6 +629,8 @@ process_create(ppsw_server_t* self,
//printf ("ppsvod_create(%s, %s, %s)\n", oem_name, terminal_type, device_id);
ret = ppsvod_create(oem_name, terminal_type, device_id, ppsw_callback);
+ if (ret == 0)
+ self->created = 1;
free (oem_name);
free (terminal_type);
@@ -643,7 +646,10 @@ process_destroy(ppsw_server_t* self,
int ret;
//printf ("pps_vode_destroy\n");
+ if (!self->created)
+ return send_reply(self, msg->seq, -1);
ret = ppsvod_destroy();
+ self->created = 0;
return send_reply(self, msg->seq, ret);
}
@@ -1270,6 +1276,12 @@ ppsw_server_run(ppsw_t* super, int infinit)
ppsw_server_clear_play_requests (self);
close(self->base.sock);
+
+ if (self->created) {
+ ppsvod_destroy ();
+ self->created = 0;
+ }
+
self->base.sock = -1;
self->base.seq = 0;
diff --git a/wrapper/ppswrapper.h b/wrapper/ppswrapper.h
index 2d6f5a8..6bc920f 100644
--- a/wrapper/ppswrapper.h
+++ b/wrapper/ppswrapper.h
@@ -200,6 +200,8 @@ typedef struct {
int srv_sock;
int done;
+ int created;
+
pthread_mutex_t mutex;
pthread_mutex_t bufmutex;
pthread_mutex_t play_queue_mutex;