Enlightenment CVS committal Author : raster Project : e17 Module : libs/emotion
Dir : e17/libs/emotion/src/modules Modified Files: emotion_xine.c emotion_xine.h Log Message: remove race conditions! SMELLY! this does mean more fd's though ! :( =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/emotion/src/modules/emotion_xine.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- emotion_xine.c 24 Jun 2004 10:55:43 -0000 1.3 +++ emotion_xine.c 24 Jun 2004 13:59:05 -0000 1.4 @@ -7,12 +7,6 @@ #include <pthread.h> static int init_count = 0; -static int fd_read = -1; -static int fd_write = -1; -Ecore_Fd_Handler *fd_handler = NULL; -static int fd_ev_read = -1; -static int fd_ev_write = -1; -Ecore_Fd_Handler *fd_ev_handler = NULL; static xine_t *decoder = NULL; static int em_init(void); @@ -88,40 +82,6 @@ } } xine_init(decoder); - { - int fds[2]; - - if (pipe(fds) == 0) - { - fd_read = fds[0]; - fd_write = fds[1]; - fcntl(fd_read, F_SETFL, O_NONBLOCK); - fd_handler = ecore_main_fd_handler_add(fd_read, - ECORE_FD_READ, - _em_fd_active, - decoder, - NULL, - NULL); - ecore_main_fd_handler_active_set(fd_handler, ECORE_FD_READ); - } - } - { - int fds[2]; - - if (pipe(fds) == 0) - { - fd_ev_read = fds[0]; - fd_ev_write = fds[1]; - fcntl(fd_ev_read, F_SETFL, O_NONBLOCK); - fd_ev_handler = ecore_main_fd_handler_add(fd_ev_read, - ECORE_FD_READ, - _em_fd_ev_active, - decoder, - NULL, - NULL); - ecore_main_fd_handler_active_set(fd_ev_handler, ECORE_FD_READ); - } - } } return init_count; } @@ -134,20 +94,7 @@ if (decoder) { xine_exit(decoder); - ecore_main_fd_handler_del(fd_handler); - close(fd_write); - close(fd_read); - ecore_main_fd_handler_del(fd_ev_handler); - close(fd_ev_write); - close(fd_ev_read); - decoder = NULL; - fd_handler = NULL; - fd_read = -1; - fd_write = -1; - fd_ev_handler = NULL; - fd_ev_read = -1; - fd_ev_write = -1; } return 0; } @@ -164,7 +111,6 @@ ev = calloc(1, sizeof(Emotion_Xine_Video)); if (!ev) return NULL; ev->obj = obj; - ev->fd = fd_write; /* some notes on parameters we could swizzle for certain inputs */ if (0) @@ -278,6 +224,42 @@ printf("MRL: %s\n", auto_play_mrls[i]); } } + { + int fds[2]; + + if (pipe(fds) == 0) + { + ev->fd_read = fds[0]; + ev->fd_write = fds[1]; + fcntl(ev->fd_read, F_SETFL, O_NONBLOCK); + ev->fd_handler = ecore_main_fd_handler_add(ev->fd_read, + ECORE_FD_READ, + _em_fd_active, + ev, + NULL, + NULL); + ecore_main_fd_handler_active_set(ev->fd_handler, ECORE_FD_READ); + } + } + { + int fds[2]; + + if (pipe(fds) == 0) + { + ev->fd_ev_read = fds[0]; + ev->fd_ev_write = fds[1]; + fcntl(ev->fd_ev_read, F_SETFL, O_NONBLOCK); + ev->fd_ev_handler = ecore_main_fd_handler_add(ev->fd_ev_read, + ECORE_FD_READ, + _em_fd_ev_active, + ev, + NULL, + NULL); + ecore_main_fd_handler_active_set(ev->fd_ev_handler, ECORE_FD_READ); + } + } + ev->fd = ev->fd_write; + ev->video = xine_open_video_driver(decoder, "emotion", XINE_VISUAL_TYPE_NONE, ev); ev->audio = xine_open_audio_driver(decoder, "oss", ev); // ev->audio = xine_open_audio_driver(decoder, "alsa", ev); @@ -288,6 +270,12 @@ xine_event_create_listener_thread(ev->queue, _em_event, ev); if (!xine_open(ev->stream, file)) { + ecore_main_fd_handler_del(ev->fd_handler); + close(ev->fd_write); + close(ev->fd_read); + ecore_main_fd_handler_del(ev->fd_ev_handler); + close(ev->fd_ev_write); + close(ev->fd_ev_read); xine_dispose(ev->stream); if (ev->video) xine_close_video_driver(decoder, ev->video); if (ev->audio) xine_close_audio_driver(decoder, ev->audio); @@ -295,7 +283,6 @@ free(ev); return NULL; } - if (xine_get_pos_length(ev->stream, &pos_stream, &pos_time, &length_time)) { ev->pos = 0.0; @@ -320,6 +307,12 @@ ev = (Emotion_Xine_Video *)ef; while (ev->seek_to); + ecore_main_fd_handler_del(ev->fd_handler); + close(ev->fd_write); + close(ev->fd_read); + ecore_main_fd_handler_del(ev->fd_ev_handler); + close(ev->fd_ev_write); + close(ev->fd_ev_read); xine_stop(ev->stream); xine_close(ev->stream); xine_dispose(ev->stream); @@ -959,6 +952,7 @@ int pos_time = 0; int length_time = 0; + ev = data; fd = ecore_main_fd_handler_fd_get(fdh); while ((len = read(fd, &buf, sizeof(buf))) > 0) { @@ -1007,7 +1001,9 @@ { void *buf[2]; Emotion_Xine_Event *new_ev; + Emotion_Xine_Video *ev; + ev = data; new_ev = calloc(1, sizeof(Emotion_Xine_Event)); if (!new_ev) return; new_ev->type = event->type; @@ -1023,21 +1019,22 @@ } buf[0] = data; buf[1] = new_ev; - write(fd_ev_write, buf, sizeof(buf)); + write(ev->fd_ev_write, buf, sizeof(buf)); } static int _em_fd_ev_active(void *data, Ecore_Fd_Handler *fdh) { + Emotion_Xine_Video *ev; int fd, len; void *buf[2]; + ev = data; fd = ecore_main_fd_handler_fd_get(fdh); while ((len = read(fd, buf, sizeof(buf))) > 0) { if (len == sizeof(buf)) { - Emotion_Xine_Video *ev; Emotion_Xine_Event *eev; ev = buf[0]; =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/emotion/src/modules/emotion_xine.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- emotion_xine.h 24 Jun 2004 06:11:32 -0000 1.2 +++ emotion_xine.h 24 Jun 2004 13:59:05 -0000 1.3 @@ -24,6 +24,12 @@ int seek_to; double seek_to_pos; Ecore_Timer *timer; + int fd_read; + int fd_write; + Ecore_Fd_Handler *fd_handler; + int fd_ev_read; + int fd_ev_write; + Ecore_Fd_Handler *fd_ev_handler; unsigned char play : 1; unsigned char just_loaded : 1; unsigned char video_mute : 1; ------------------------------------------------------- This SF.Net email sponsored by Black Hat Briefings & Training. Attend Black Hat Briefings & Training, Las Vegas July 24-29 - digital self defense, top technical experts, no vendor pitches, unmatched networking opportunities. Visit www.blackhat.com _______________________________________________ enlightenment-cvs mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs