Enlightenment CVS committal

Author  : chaos
Project : e17
Module  : libs/epsilon

Dir     : e17/libs/epsilon/src/bin


Modified Files:
        epsilon_thumbd.c 


Log Message:
* Epsilon has moved to ecore_ipc - we may as well rely on the infrastructure 
provided by Ecore, and not duplicate
* Epsilon now works, and doesn't seem to crash on large input sets.  Please 
test, and report back to me if something doesn't work
* printfs->debug

===================================================================
RCS file: /cvs/e/e17/libs/epsilon/src/bin/epsilon_thumbd.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- epsilon_thumbd.c    25 Jul 2007 17:00:58 -0000      1.5
+++ epsilon_thumbd.c    27 Jul 2007 14:09:32 -0000      1.6
@@ -1,7 +1,7 @@
 #include "epsilon_private.h"
 #include <Ecore.h>
 #include <Ecore_Data.h>
-#include <Ecore_Con.h>
+#include <Ecore_Ipc.h>
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -33,7 +33,7 @@
 struct _Epsilon_Client
 {
        unsigned int         id;
-       Ecore_Con_Client    *client;
+       Ecore_Ipc_Client    *client;
        Ecore_List          *thumbs;
 
        Epsilon_Ipc_End  ipcend;
@@ -60,7 +60,7 @@
 {
        Ecore_List *thumbs;
        pid_t child;
-       Ecore_Con_Server *server;
+       Ecore_Ipc_Server *server;
        Epsilon_Ipc_End ipcend;
 };
 
@@ -93,8 +93,8 @@
 static Ecore_List *queued_workers;
 static Ecore_List *gworkers = NULL;
 
-static Ecore_Con_Server *thumb_server = NULL;
-static Ecore_Con_Server *thumbd_server = NULL;
+static Ecore_Ipc_Server *thumb_server = NULL;
+static Ecore_Ipc_Server *thumbd_server = NULL;
 
 static Ecore_List *response_queue = NULL;
 
@@ -111,6 +111,8 @@
 void epsilond_init_thumbd_server(Ecore_List* workers) 
 {
        char* buf;
+
+       ecore_init();
        
        /*
         * Retrieve the safe socket name for the server.
@@ -122,22 +124,23 @@
        /*
         * Setup the IPC server to handle completed notifications
         */
-       thumbd_server = ecore_con_server_add(ECORE_CON_LOCAL_USER, buf, 0, 
NULL);
-
-       free(buf);
+       thumbd_server = ecore_ipc_server_add(ECORE_IPC_LOCAL_USER, 
EPSILOND_SOCK, 0, NULL);
 
        /*
         * Prepare the handlers for worker IPC events
         */
-       worker_add = ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_ADD, 
epsilond_cb_worker_add, workers);
-       worker_del = ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DEL, 
epsilond_cb_worker_del, workers);
-       worker_data = ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DATA, 
epsilond_cb_worker_data, workers);
+       worker_add = ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_ADD, 
epsilond_cb_worker_add, workers);
+       worker_del = ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DEL, 
epsilond_cb_worker_del, workers);
+       worker_data = ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DATA, 
epsilond_cb_worker_data, workers);
+
 }
 
 void epsilond_shutdown_thumbd_server()
 {
-       if (thumbd_server)
-               ecore_con_server_del(thumbd_server);
+       if (thumbd_server) {
+               ecore_ipc_server_del(thumbd_server);
+               thumbd_server = NULL;
+       }
        
        ecore_event_handler_del(worker_add);
        ecore_event_handler_del(worker_del);
@@ -153,13 +156,13 @@
 epsilond_cb_client_add(void *data, int type, void *event)
 {
        Epsilon_Client *cl;
-       Ecore_Con_Event_Client_Add *e;
+       Ecore_Ipc_Event_Client_Add *e;
        Ecore_List *clients = data;
 
        e = event;
        type = 0;
 
-       if (ecore_con_client_server_get(e->client) != thumb_server) return 1;
+       if (ecore_ipc_client_server_get(e->client) != thumb_server) return 1;
 
        if (debug) printf("!!! client %p connected to server!\n", e->client);
        cl = calloc(1, sizeof(Epsilon_Client));
@@ -184,14 +187,14 @@
 epsilond_cb_worker_add(void *data, int type, void *event)
 {
        Epsilon_Client *cl;
-       Ecore_Con_Event_Client_Add *e;
+       Ecore_Ipc_Event_Client_Add *e;
        Ecore_List *workers = data;
 
        e = event;
        data = NULL;
        type = 0;
 
-       if (ecore_con_client_server_get(e->client) != thumbd_server) return 1;
+       if (ecore_ipc_client_server_get(e->client) != thumbd_server) return 1;
 
        if (debug) printf("?? Worker added to %ld ??\n", (long int)getpid());
        cl = calloc(1, sizeof(Epsilon_Client));
@@ -212,14 +215,14 @@
 int
 epsilond_cb_client_del(void *data, int type, void *event)
 {
-       Ecore_Con_Event_Client_Del *e;
+       Ecore_Ipc_Event_Client_Del *e;
        Epsilon_Client *cl;
        Ecore_List *clients = data;
 
        e = event;
        type = 0;
 
-       if (ecore_con_client_server_get(e->client) != thumb_server) return 1;
+       if (ecore_ipc_client_server_get(e->client) != thumb_server) return 1;
 
        if (debug) printf("!!! client %p disconnected from server!\n", 
e->client);
 
@@ -241,23 +244,20 @@
                ecore_list_next(clients);
        }
 
-       running_workers--;
-       if (!running_workers) epsilond_shutdown_thumbd_server();
-
        return 1;
 }
 
 int
 epsilond_cb_worker_del(void *data, int type, void *event)
 {
-       Ecore_Con_Event_Client_Del *e;
+       Ecore_Ipc_Event_Client_Del *e;
        Epsilon_Client *cl;
        Ecore_List *workers = data;
 
        e = event;
        type = 0;
 
-       if (ecore_con_client_server_get(e->client) != thumbd_server) return 1;
+       if (ecore_ipc_client_server_get(e->client) != thumbd_server) return 1;
 
        if (debug) printf("!!! worker %p disconnected from server!\n", 
e->client);
 
@@ -279,6 +279,10 @@
                ecore_list_next(workers);
        }
 
+       running_workers--;
+       /*if (!running_workers) epsilond_shutdown_thumbd_server();
+       else printf ("**** Worker finished - now %d\n", running_workers);*/
+
        return 1;
 }
 
@@ -307,14 +311,14 @@
 int
 epsilond_cb_client_data(void *data, int type, void *event)
 {
-       Ecore_Con_Event_Client_Data *e;
+       Ecore_Ipc_Event_Client_Data *e;
        Epsilon_Client *cl;
        Ecore_List *clients = data;
 
        e = event;
        type = 0;
 
-       if (ecore_con_client_server_get(e->client) != thumb_server) return 1;
+       if (ecore_ipc_client_server_get(e->client) != thumb_server) return 1;
 
        if (debug) printf("!!! client %p sent data\n", e->client);
 
@@ -329,19 +333,21 @@
 
        if (cl) {
                Epsilon_Message *msg;
-               epsilon_ipc_push(&cl->ipcend, e->data, e->size);
+               Epsilon_Message *msg2;
 
                /*
                 * Process all messages in the data buffer for this client and
                 * queue them for processing in the next idle state.
                 */
-               while ((msg = epsilon_ipc_consume(&cl->ipcend))) {
-                       if (debug) printf("** Received %s **\n", ((char *)msg + 
sizeof(Epsilon_Message)));
-                       if (!cl->thumbs)
-                               cl->thumbs = ecore_list_new();
-                       msg->nid = cl->id;
-                       ecore_list_append(cl->thumbs, msg);
-               }
+               msg = e->data;
+               msg2 = calloc(1,sizeof(Epsilon_Message)+msg->bufsize); 
+               memcpy(msg2,msg,sizeof(Epsilon_Message)+msg->bufsize);
+               
+               if (debug) printf("** Received %d : %s **\n",msg->mid,  ((char 
*)msg + sizeof(Epsilon_Message)));
+               if (!cl->thumbs)
+                       cl->thumbs = ecore_list_new();
+               msg2->nid = cl->id;
+               ecore_list_append(cl->thumbs, msg2);
        }
        else {
                if (debug) printf("ERROR: No matching client for data\n");
@@ -353,7 +359,7 @@
 int
 epsilond_cb_worker_data(void *data, int type, void *event)
 {
-       Ecore_Con_Event_Client_Data *e;
+       Ecore_Ipc_Event_Client_Data *e;
        Epsilon_Client *cl;
        Ecore_List *workers;
 
@@ -361,7 +367,7 @@
        workers = data;
        type = 0;
 
-       if (ecore_con_client_server_get(e->client) != thumbd_server) return 1;
+       if (ecore_ipc_client_server_get(e->client) != thumbd_server) return 1;
 
        if (debug) printf("?? Worker data ??\n");
 
@@ -376,21 +382,21 @@
 
        if (cl) {
                Epsilon_Message *msg;
+               msg = (Epsilon_Message*)e->data;
 
-               epsilon_ipc_push(&cl->ipcend, e->data, e->size);
+               if (debug) printf("Onsend to client -> response for %d\n", 
msg->mid);
 
                /*
                 * Process all messages in the data buffer for this client.
                 */
-               while ((msg = epsilon_ipc_consume(&cl->ipcend))) {
-                       Epsilon_Response *response;
+               Epsilon_Response *response;
 
-                       response = calloc(1, sizeof(Epsilon_Response));
-                       if (response) {
-                               response->client = cl;
-                               response->msg = msg;
-                               ecore_list_append(response_queue, response);
-                       }
+               response = calloc(1, sizeof(Epsilon_Response));
+               if (response) {
+                       response->client = cl;
+                       response->msg = 
calloc(1,sizeof(Epsilon_Message)+msg->bufsize);
+                       memcpy(response->msg, msg, 
sizeof(Epsilon_Message)+msg->bufsize);
+                       ecore_list_append(response_queue, response);
                }
        }
        else {
@@ -481,7 +487,7 @@
                path = ((char *)msg + sizeof(Epsilon_Message));
                ep = epsilon_new(path);
                epsilon_thumb_size(ep, msg->thumbsize);
-               if (debug) printf("Thumbnailing %s\n", path);
+               if (debug) printf("Thumbnailing %d: %s\n", msg->mid, path);
 
                /*
                 * Check for an existing thumbnail and generate one if it
@@ -515,11 +521,13 @@
                 * Notify the daemon of the completed thumbnail.
                 */
                msg->status = status;
-               if (epsilon_ipc_server_send(worker->server, msg) < 0) {
+               if (debug) printf("Dispatching response for %d\n", msg->mid);
+               if (ecore_ipc_server_send(worker->server, 
1,1,1,1,1,msg,sizeof(Epsilon_Message)+msg->bufsize) < 0) {
                        perror("write");
                }
+               //ecore_ipc_server_flush(worker->server);
        }
-
+       //ecore_ipc_server_flush(worker->server);
        ecore_main_loop_quit();
 
        return 1;
@@ -549,8 +557,8 @@
                ecore_event_handler_del(client_data);
                client_data = NULL;
 
-               ecore_con_server_del(thumb_server);
-               ecore_con_server_del(thumbd_server);
+               ecore_ipc_server_del(thumb_server);
+               ecore_ipc_server_del(thumbd_server);
 
                thumb_server = NULL;
                thumbd_server = NULL;
@@ -558,19 +566,15 @@
                /*
                 * Connect back to the parent process.
                 */
-               buf = epsilond_socket_path(EPSILOND_SOCK);
-
-               worker->server = ecore_con_server_connect(ECORE_CON_LOCAL_USER, 
buf, 0, NULL);
+               worker->server = ecore_ipc_server_connect(ECORE_IPC_LOCAL_USER, 
EPSILOND_SOCK, 0, NULL);
                if (worker->server) {
-                       if (debug) printf("Connecting to %s\n", buf);
+                       if (debug) printf("Connecting to %s\n", EPSILOND_SOCK);
                }
                else {
-                       if (debug) printf("Failed connection to %s\n", buf);
+                       if (debug) printf("Failed connection to %s\n", 
EPSILOND_SOCK);
                        exit(1);
                }
-               free(buf);
 
-               // ecore_idler_add(epsilond_worker_run, worker);
                epsilond_worker_run(worker);
                return 0;
        }
@@ -613,9 +617,11 @@
                                        (long int)getpid(), cl->id);
 
                        if (debug) printf("Client %p\n", cl->client);
-                       if (epsilon_ipc_client_send(cl->client, msg) < 0)
+                       if (ecore_ipc_client_send(cl->client, 
1,1,1,1,1,msg,sizeof(Epsilon_Message) + msg->bufsize) < 0)
                                perror("write");
                        free(msg);
+               } else {
+                       printf("Client: %p, Msg: %p\n",cl,msg);
                }
 
                free(response);
@@ -682,7 +688,8 @@
                        if (ecore_list_count(worker->thumbs)) {
                                idle--;
 
-                               if (!running_workers) 
epsilond_init_thumbd_server(gworkers);
+                               /*if (!running_workers) 
epsilond_init_thumbd_server(gworkers);
+                               else printf ("**** Added worker - now %d\n", 
running_workers+1);*/
                                running_workers++;
                                
                                if (!epsilond_worker_fork(worker))
@@ -737,16 +744,18 @@
        /*
         * Setup the IPC server to handle requests
         */
-       thumb_server = ecore_con_server_add(ECORE_CON_LOCAL_USER, buf, 0, 
clients);
+       thumb_server = ecore_ipc_server_add(ECORE_IPC_LOCAL_USER, EPSILON_SOCK, 
0, NULL);
 
        free(buf);
 
        /*
         * Prepare the handlers for client interaction.
         */
-       client_add = ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_ADD, 
epsilond_cb_client_add, clients);
-       client_del = ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DEL, 
epsilond_cb_client_del, clients);
-       client_data = ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DATA, 
epsilond_cb_client_data, clients);
+       client_add = ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_ADD, 
epsilond_cb_client_add, clients);
+       client_del = ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DEL, 
epsilond_cb_client_del, clients);
+       client_data = ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DATA, 
epsilond_cb_client_data, clients);
+
+       epsilond_init_thumbd_server(gworkers);
 
        /*
         * Initialize the worker threads
@@ -814,7 +823,7 @@
 {
        Epsilon_Message *msg;
        worker->child = 0;
-       while ((msg = ecore_list_first_remove(worker->thumbs)))
+       while ((msg = ecore_list_remove_first(worker->thumbs))) 
                free(msg);
        return 1;
 }
@@ -826,7 +835,7 @@
         * Initialize ecore internals.
         */
        ecore_init();
-       ecore_con_init();
+       ecore_ipc_init();
        ecore_app_args_set(argc, argv);
 
        /*
@@ -842,7 +851,7 @@
        /*
         * Request processing complete, cleanup.
         */
-       ecore_con_shutdown();
+       ecore_ipc_shutdown();
        ecore_shutdown();
 
        if (debug) printf("Process %ld shut down\n", (long int)getpid());



-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to