[prev in list] [next in list] [prev in thread] [next in thread] 

List:       enlightenment-svn
Subject:    E SVN: antognolli trunk/evas/src/bin
From:       "Enlightenment SVN" <no-reply () enlightenment ! org>
Date:       2012-05-31 21:34:09
Message-ID: 20120531213409.6FC4011809E () e2 ! enlightenment ! org
[Download RAW message or body]

Log:
evas/cserve2: Some more code to requests management.
  Added code to slave read and slave dead callbacks.
  
  

Author:       antognolli
Date:         2012-05-31 14:34:09 -0700 (Thu, 31 May 2012)
New Revision: 71603
Trac:         http://trac.enlightenment.org/e/changeset/71603

Modified:
  trunk/evas/src/bin/evas_cserve2.h trunk/evas/src/bin/evas_cserve2_requests.c 

Modified: trunk/evas/src/bin/evas_cserve2.h
===================================================================
--- trunk/evas/src/bin/evas_cserve2.h	2012-05-31 21:34:04 UTC (rev 71602)
+++ trunk/evas/src/bin/evas_cserve2.h	2012-05-31 21:34:09 UTC (rev 71603)
@@ -116,7 +116,7 @@
 typedef struct _Slave_Msg_Image_Loaded Slave_Msg_Image_Loaded;
 
 typedef void *(*Font_Request_Msg_Create)(void *data, int *size);
-typedef void *(*Font_Request_Msg_Free)(void *data);
+typedef void (*Font_Request_Msg_Free)(void *data);
 typedef void (*Font_Request_Response)(Client *c, void *data, void *resp, unsigned \
int rid);  typedef void (*Font_Request_Error)(Client *c, void *data, Error_Type \
error, unsigned int rid);  

Modified: trunk/evas/src/bin/evas_cserve2_requests.c
===================================================================
--- trunk/evas/src/bin/evas_cserve2_requests.c	2012-05-31 21:34:04 UTC (rev 71602)
+++ trunk/evas/src/bin/evas_cserve2_requests.c	2012-05-31 21:34:09 UTC (rev 71603)
@@ -15,6 +15,7 @@
 
 struct _Slave_Worker
 {
+   Slave_Type type;
    void *data;
    Slave *slave;
    Eina_Binbuf *ret;
@@ -189,15 +190,58 @@
 }
 
 static void
-_image_slave_read_cb(Slave *s __UNUSED__, Slave_Command cmd __UNUSED__, void *msg \
__UNUSED__, void *data __UNUSED__) +_cserve2_request_failed(Font_Request *req, \
Error_Type type)  {
+   Waiter *w;
+
+   EINA_LIST_FREE(req->waiters, w)
+     {
+        req->funcs->error(w->client, req->data, type, w->rid);
+        free(w);
+     }
+
+   req->funcs->msg_free(req->msg);
+   free(req);
 }
 
 static void
-_image_slave_dead_cb(Slave *s __UNUSED__, void *data __UNUSED__)
+_slave_read_cb(Slave *s __UNUSED__, Slave_Command cmd __UNUSED__, void *msg, void \
*data)  {
+   Slave_Worker *sw = data;
+   Font_Request *req = sw->data;
+   Eina_List **working, **idle;
+   Waiter *w;
+
+   EINA_LIST_FREE(req->waiters, w)
+     {
+        req->response(w->client, req->data, msg, w->rid);
+        free(w);
+     }
+
+   req->funcs->msg_free(req->msg);
+   free(req);
+   sw->data = NULL;
+
+   working = &_workers[sw->type].working;
+   idle = &_workers[sw->type].idle;
+   *working = eina_list_remove(*working, sw);
+   *idle = eina_list_append(*idle, sw);
 }
 
+static void
+_slave_dead_cb(Slave *s __UNUSED__, void *data)
+{
+   Slave_Worker *sw = data;
+   Font_Request *req = sw->data;
+   Eina_List **working = &_workers[sw->type].working;
+
+   if (req)
+     _cserve2_request_failed(req, CSERVE2_LOADER_DIED);
+
+   *working = eina_list_remove(*working, sw);
+   free(sw);
+}
+
 static Slave *
 _create_image_slave(void *data)
 {
@@ -207,8 +251,8 @@
    exe = getenv("EVAS_CSERVE2_SLAVE");
    if (!exe) exe = "evas_cserve2_slave";
 
-   slave = cserve2_slave_run(exe, _image_slave_read_cb,
-                             _image_slave_dead_cb, data);
+   slave = cserve2_slave_run(exe, _slave_read_cb,
+                             _slave_dead_cb, data);
 
    return slave;
 }
@@ -237,6 +281,7 @@
      }
 
    sw->slave = slave;
+   sw->type = type;
    _workers[type].idle = eina_list_append(_workers[type].idle, sw);
 
    return sw;
@@ -262,21 +307,6 @@
    return EINA_TRUE;
 }
 
-static void
-_cserve2_request_failed(Font_Request *req, Error_Type type)
-{
-   Waiter *w;
-
-   EINA_LIST_FREE(req->waiters, w)
-     {
-        req->funcs->error(w->client, req->data, type, w->rid);
-        free(w);
-     }
-
-   req->funcs->msg_free(req->msg);
-   free(req);
-}
-
 void
 cserve2_requests_process(void)
 {


------------------------------------------------------------------------------
Live Security Virtual Conference
Exclusive live event will cover all the ways today's security and 
threat landscape has changed and how IT managers can respond. Discussions 
will include endpoint security, mobile security and the latest in malware 
threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
_______________________________________________
enlightenment-svn mailing list
enlightenment-svn@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-svn


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic