[Mplayerplug-in-cvs] mplayerplug-in/Source plugin-support.cpp,1.89,1.90 plugin-threads.cpp,1.196,1.1
Brought to you by:
kdekorte
From: Kevin D. <kde...@us...> - 2005-11-30 16:37:11
|
Update of /cvsroot/mplayerplug-in/mplayerplug-in/Source In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30029/Source Modified Files: plugin-support.cpp plugin-threads.cpp plugin.cpp plugin.h Log Message: Fix fgetc crash by using a lock and changing to fread Index: plugin.h =================================================================== RCS file: /cvsroot/mplayerplug-in/mplayerplug-in/Source/plugin.h,v retrieving revision 1.90 retrieving revision 1.91 diff -C2 -d -r1.90 -r1.91 *** plugin.h 8 Nov 2005 14:22:04 -0000 1.90 --- plugin.h 30 Nov 2005 16:37:02 -0000 1.91 *************** *** 273,276 **** --- 273,277 ---- pthread_mutex_t playlist_cond_mutex; pthread_mutex_t control_mutex; + pthread_mutex_t read_mutex; #ifdef GTK2_ENABLED Index: plugin-threads.cpp =================================================================== RCS file: /cvsroot/mplayerplug-in/mplayerplug-in/Source/plugin-threads.cpp,v retrieving revision 1.196 retrieving revision 1.197 diff -C2 -d -r1.196 -r1.197 *** plugin-threads.cpp 27 Nov 2005 19:41:51 -0000 1.196 --- plugin-threads.cpp 30 Nov 2005 16:37:02 -0000 1.197 *************** *** 790,799 **** do { pthread_testcancel(); ! if (local_td->instance->cancelled == 0 && local_td->instance->player != NULL) { ! c = fgetc(local_td->instance->player); } else { c = EOF; } ! if (c == EOF) { buffer[i] = '\0'; break; --- 790,805 ---- do { pthread_testcancel(); ! // need to lock around the read ! pthread_mutex_lock(&(local_td->instance->read_mutex)); ! ! if ((local_td->instance->cancelled == 0) && (local_td->instance->player != NULL)) { ! // c = fgetc(local_td->instance->player); ! fread(&c,1,1,local_td->instance->player); } else { c = EOF; } ! pthread_mutex_unlock(&(local_td->instance->read_mutex)); ! ! if (c == EOF) { buffer[i] = '\0'; break; Index: plugin.cpp =================================================================== RCS file: /cvsroot/mplayerplug-in/mplayerplug-in/Source/plugin.cpp,v retrieving revision 1.260 retrieving revision 1.261 diff -C2 -d -r1.260 -r1.261 *** plugin.cpp 27 Nov 2005 19:41:51 -0000 1.260 --- plugin.cpp 30 Nov 2005 16:37:02 -0000 1.261 *************** *** 300,303 **** --- 300,304 ---- pthread_mutex_init(&playlist_cond_mutex, NULL); pthread_mutex_init(&control_mutex, NULL); + pthread_mutex_init(&read_mutex, NULL); pthread_attr_init(&thread_attr); pthread_cond_init(&playlist_complete_cond, NULL); *************** *** 384,388 **** --- 385,391 ---- } sendCommand(this, "quit\n"); + pthread_mutex_lock(&read_mutex); cancelled = 1; + pthread_mutex_unlock(&read_mutex); pthread_mutex_unlock(&control_mutex); pthread_cancel(player_thread); *************** *** 612,615 **** --- 615,621 ---- if (DEBUG > 1) printf("control_mutex destroyed\n"); + pthread_mutex_destroy(&read_mutex); + if (DEBUG > 1) + printf("read_mutex destroyed\n"); pthread_cond_destroy(&playlist_complete_cond); if (DEBUG > 1) Index: plugin-support.cpp =================================================================== RCS file: /cvsroot/mplayerplug-in/mplayerplug-in/Source/plugin-support.cpp,v retrieving revision 1.89 retrieving revision 1.90 diff -C2 -d -r1.89 -r1.90 *** plugin-support.cpp 27 Nov 2005 00:34:11 -0000 1.89 --- plugin-support.cpp 30 Nov 2005 16:37:02 -0000 1.90 *************** *** 487,491 **** --- 487,493 ---- sendCommand(instance, "pause\n"); sendCommand(instance, "quit\n"); + pthread_mutex_lock(&(instance->read_mutex)); instance->cancelled = 1; + pthread_mutex_unlock(&(instance->read_mutex)); /* count = 0; |