Enlightenment CVS committal

Author  : chaos
Project : e17
Module  : libs/epsilon

Dir     : e17/libs/epsilon/src/bin


Modified Files:
        epsilon_thumb_test.c epsilon_thumbd.c 


Log Message:
* OK, I could have *sworn* that ecore was supposed to delete your client socket 
automatically on disconnect - apparantly not.  For those having issues with 
epsilon crashing after 'a while' - this fixes it.  Process was hitting FD limit

===================================================================
RCS file: /cvs/e/e17/libs/epsilon/src/bin/epsilon_thumb_test.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- epsilon_thumb_test.c        25 Jul 2007 17:00:58 -0000      1.6
+++ epsilon_thumb_test.c        29 Jul 2007 00:38:09 -0000      1.7
@@ -76,42 +76,5 @@
        printf("\nEpsilon Thumb completed in %g seconds\n\n", end - start);
 
        epsilon_shutdown();
-#if 0
-       sleep(5);
-
-       start = ecore_time_get();
-       ecore_list_first_goto(files);
-       while ((file = ecore_list_next(files))) {
-               pid_t pid;
-               char *realpath;
-               char fullpath[PATH_MAX];
-
-               snprintf(fullpath, PATH_MAX, "%s/%s", PATH, file);
-               realpath = ecore_file_realpath(fullpath);
-
-               if (ecore_file_exists(realpath) && 
!ecore_file_is_dir(realpath)) {
-                       if ((pid = fork()) == 0) {
-                               Epsilon *ep;
-
-                               ep = epsilon_new(realpath);
-                               if (epsilon_exists(ep) == EPSILON_FAIL) {
-                                       epsilon_generate(ep);
-                               }
-                               epsilon_free(ep);
-                               exit(0);
-                       }
-                       else if (pid > 0) {
-                               int status;
-                               waitpid(pid, &status, WNOHANG);
-                               printf("\n! EVENT ! THUMB COMPLETE ! %d 
REMAINING !\n\n", incomplete_thumbs);
-                       }
-                       incomplete_thumbs++;
-               }
-       }
-
-       end = ecore_time_get();
-       printf("\nFork & Wait completed in %g seconds\n\n", end - start);
-#endif
-
        return 0;
 }
===================================================================
RCS file: /cvs/e/e17/libs/epsilon/src/bin/epsilon_thumbd.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- epsilon_thumbd.c    27 Jul 2007 14:09:32 -0000      1.6
+++ epsilon_thumbd.c    29 Jul 2007 00:38:09 -0000      1.7
@@ -32,7 +32,7 @@
 typedef struct _Epsilon_Client Epsilon_Client;
 struct _Epsilon_Client
 {
-       unsigned int         id;
+       unsigned int        id;
        Ecore_Ipc_Client    *client;
        Ecore_List          *thumbs;
 
@@ -60,8 +60,8 @@
 {
        Ecore_List *thumbs;
        pid_t child;
+       double runtime;
        Ecore_Ipc_Server *server;
-       Epsilon_Ipc_End ipcend;
 };
 
 
@@ -75,7 +75,7 @@
        Epsilon_Message *msg;
 };
 
-static int client_id = 1;
+static unsigned int client_id = 1;
 static int debug = 0;
 static double idle_time = 0;
 static int running_workers = 0;
@@ -107,7 +107,6 @@
 int epsilond_cb_worker_del(void *data, int type, void *event);
 int epsilond_cb_worker_data(void *data, int type, void *event);
 
-
 void epsilond_init_thumbd_server(Ecore_List* workers) 
 {
        char* buf;
@@ -131,12 +130,14 @@
         */
        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);
-
+       worker_data = ecore_event_handler_add(ECORE_IPC_EVENT_CLIENT_DATA, 
epsilond_cb_worker_data, workers);   
 }
 
+
+
 void epsilond_shutdown_thumbd_server()
 {
+       if (debug) printf("Shutting down server (thumbd)\n");
        if (thumbd_server) {
                ecore_ipc_server_del(thumbd_server);
                thumbd_server = NULL;
@@ -244,6 +245,8 @@
                ecore_list_next(clients);
        }
 
+       ecore_ipc_client_del(e->client);
+
        return 1;
 }
 
@@ -279,9 +282,8 @@
                ecore_list_next(workers);
        }
 
+       ecore_ipc_client_del(e->client);
        running_workers--;
-       /*if (!running_workers) epsilond_shutdown_thumbd_server();
-       else printf ("**** Worker finished - now %d\n", running_workers);*/
 
        return 1;
 }
@@ -318,7 +320,9 @@
        e = event;
        type = 0;
 
-       if (ecore_ipc_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);
 
@@ -525,9 +529,11 @@
                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);
+
+               free(msg);
        }
-       //ecore_ipc_server_flush(worker->server);
+       ecore_ipc_server_flush(worker->server);
        ecore_main_loop_quit();
 
        return 1;
@@ -541,6 +547,7 @@
         */
        ecore_list_first_goto(worker->thumbs);
 
+       worker->runtime = ecore_time_get();
        worker->child = fork();
 
        /*
@@ -548,8 +555,6 @@
         * it's idler.
         */
        if (!worker->child) {
-               char *buf;
-
                ecore_event_handler_del(client_add);
                client_add = NULL;
                ecore_event_handler_del(client_del);
@@ -589,7 +594,7 @@
 int
 epsilond_idle_enterer(void *data)
 {
-       int idle;
+       int idle=0;
        Epsilon_Client *cl;
        Epsilon_Response *response;
        Epsilon_Worker *worker;
@@ -597,7 +602,6 @@
 
        if (debug) printf("Idle state entered\n");
 
-
        /*
         * Send responses for completed thumbnails
         */
@@ -613,17 +617,16 @@
                }
 
                if (cl && msg) {
-                       if (debug) printf("%ld sending response to %d\n",
-                                       (long int)getpid(), cl->id);
+                       if (debug) printf("%ld sending response to %d (%d)\n",
+                                       (long int)getpid(), cl->id, msg->mid);
 
                        if (debug) printf("Client %p\n", cl->client);
                        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);
+                       if (debug) printf("Client: %p, Msg: %p\n",cl,msg);
                }
-
                free(response);
        }
        if (debug) printf("Finished responses\n");
@@ -651,8 +654,13 @@
                                epsilond_worker_clean(worker);
                        }
                        else {
+                               if (debug) printf("Moving idle down to %d\n", 
idle);
                                idle--;
                        }
+
+                       if (debug) printf("Worker %d runtime: %f\n", 
worker->child, ecore_time_get() - worker->runtime);
+               } else {
+                       if (debug) printf("Worker child pid not set, thumbs is: 
%d\n", ecore_list_count(worker->thumbs));
                }
        }
 
@@ -672,13 +680,17 @@
                /*
                 * No worker threads available, so quit trying to do work.
                 */
-               if (available < 1)
+               if (available < 1) {
+                       if (debug) printf("No workers available\n");
                        break;
+               }
 
        }
 
        idle = ecore_list_count(queued_workers);
 
+       if (debug) printf("Idle: %d\n", idle);
+
        /*
         * Fork off worker threads to begin thumbnailing.
         */
@@ -692,14 +704,19 @@
                                else printf ("**** Added worker - now %d\n", 
running_workers+1);*/
                                running_workers++;
                                
-                               if (!epsilond_worker_fork(worker))
+                               if (!epsilond_worker_fork(worker)) {
+                                       if (debug) printf("Error forking worker 
%p\n", worker);
                                        return 0;
+                               }
+                       } else {
+                               if (debug) printf ("No thumbs to process\n");
                        }
                }
                else {
                        idle--;
                }
        }
+       if (debug) printf("Idle: %d\n", idle);
 
        /*
         * FIXME: Detect idle time and exit after a specified interval



-------------------------------------------------------------------------
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