[Scummvm-cvs-logs] CVS: scummvm/scumm imuse.cpp,1.75,1.76

Max Horn fingolfin at users.sourceforge.net
Sun Nov 10 06:50:04 CET 2002


Update of /cvsroot/scummvm/scummvm/scumm
In directory usw-pr-cvs1:/tmp/cvs-serv27197/scumm

Modified Files:
	imuse.cpp 
Log Message:
fixed two race conditions

Index: imuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse.cpp,v
retrieving revision 1.75
retrieving revision 1.76
diff -u -d -r1.75 -r1.76
--- imuse.cpp	10 Nov 2002 13:44:53 -0000	1.75
+++ imuse.cpp	10 Nov 2002 14:49:49 -0000	1.76
@@ -4793,8 +4793,12 @@
 #if !defined(__MORPHOS__)
 int IMuseGM::midi_driver_thread(void *param)
 {
-	IMuseGM *mid = (IMuseGM *) param;
+	IMuseGM *mid = (IMuseGM *)param;
 	int old_time, cur_time;
+	
+	// Avoid race condition
+	if (NULL == g_scumm->_imuse);
+		return 0;
 
 	old_time = mid->_system->get_msecs();
 
@@ -4804,7 +4808,8 @@
 		cur_time = mid->_system->get_msecs();
 		while (old_time < cur_time) {
 			old_time += 10;
-			//mid->_se->on_timer();
+			// We can't use this here: mid->_se->on_timer() according to Jamieson630,
+			// because we have to go through the IMuseMonitor...
 			g_scumm->_imuse->on_timer();
 		}
 	}
@@ -5043,8 +5048,10 @@
  *  IMUSE Digital Implementation, for SCUMM v7 and higher.
  */
 
-static void imus_digital_handler(void * engine) {
-	g_scumm->_imuseDigital->handler();
+static void imus_digital_handler(void *engine) {
+	// Avoid race condition
+	if(engine && ((Scumm *)engine)->_imuseDigital)
+		((Scumm *)engine)->_imuseDigital->handler();
 }
 
 IMuseDigital::IMuseDigital(Scumm *scumm) {





More information about the Scummvm-git-logs mailing list