Changeset - r4323:1dbdaaf66c90
[Not reviewed]
master
0 3 0
truelight - 18 years ago 2006-08-20 13:39:33
truelight@openttd.org
(svn r5977) -Fix [FS#78]: never set I-am-a-thread bool to true IN the thread. Machines with
dualcore can be faster then you want, and therefor create 2 threads, while
you made the bool to make sure there is never more then 1 thread of this type.
3 files changed with 8 insertions and 9 deletions:
0 comments (0 inline, 0 general)
openttd.c
Show inline comments
 
@@ -535,9 +535,9 @@ int ttd_main(int argc, char *argv[])
 

	
 
/** Mutex so that only one thread can communicate with the main program
 
 * at any given time */
 
static ThreadMsg _message = 0;
 
static ThreadMsg _message = MSG_OTTD_NO_MESSAGE;
 

	
 
static inline void OTTD_ReleaseMutex(void) {_message = 0;}
 
static inline void OTTD_ReleaseMutex(void) {_message = MSG_OTTD_NO_MESSAGE;}
 
static inline ThreadMsg OTTD_PollThreadEvent(void) {return _message;}
 

	
 
/** Called by running thread to execute some action in the main game.
 
@@ -545,7 +545,7 @@ static inline ThreadMsg OTTD_PollThreadE
 
void OTTD_SendThreadMessage(ThreadMsg msg)
 
{
 
	if (_exit_game) return;
 
	while (_message != 0) CSleep(10);
 
	while (_message != MSG_OTTD_NO_MESSAGE) CSleep(10);
 

	
 
	_message = msg;
 
}
 
@@ -557,7 +557,6 @@ void OTTD_SendThreadMessage(ThreadMsg ms
 
static void ProcessSentMessage(ThreadMsg message)
 
{
 
	switch (message) {
 
		case MSG_OTTD_SAVETHREAD_START: SaveFileStart(); break;
 
		case MSG_OTTD_SAVETHREAD_DONE:  SaveFileDone(); break;
 
		case MSG_OTTD_SAVETHREAD_ERROR: SaveFileError(); break;
 
		default: NOT_REACHED();
openttd.h
Show inline comments
 
@@ -527,9 +527,9 @@ VARDEF byte _no_scroll;
 
 * the OTTD_SendThreadMessage() function. Actions to perform upon the message are handled
 
 * in the ProcessSentMessage() function */
 
typedef enum ThreadMsgs {
 
	MSG_OTTD_SAVETHREAD_START  = 1,
 
	MSG_OTTD_SAVETHREAD_DONE   = 2,
 
	MSG_OTTD_SAVETHREAD_ERROR  = 3,
 
	MSG_OTTD_NO_MESSAGE,
 
	MSG_OTTD_SAVETHREAD_DONE,
 
	MSG_OTTD_SAVETHREAD_ERROR,
 
} ThreadMsg;
 

	
 
void OTTD_SendThreadMessage(ThreadMsg msg);
saveload.c
Show inline comments
 
@@ -1402,8 +1402,6 @@ static void* SaveFileToDisk(void *arg)
 
	const SaveLoadFormat *fmt;
 
	uint32 hdr[2];
 

	
 
	if (arg != NULL) OTTD_SendThreadMessage(MSG_OTTD_SAVETHREAD_START);
 

	
 
	/* XXX - Setup setjmp error handler if an error occurs anywhere deep during
 
	 * loading/saving execute a longjmp() and continue execution here */
 
	if (setjmp(_sl.excpt)) {
 
@@ -1536,10 +1534,12 @@ SaveOrLoadResult SaveOrLoad(const char *
 
		SlSaveChunks();
 
		SlWriteFill(); // flush the save buffer
 

	
 
		SaveFileStart();
 
		if (_network_server ||
 
					(save_thread = OTTDCreateThread(&SaveFileToDisk, (void*)"")) == NULL) {
 
			DEBUG(misc, 1) ("[Sl] Cannot create savegame thread, reverting to single-threaded mode...");
 
			SaveFileToDisk(NULL);
 
			SaveFileDone();
 
		}
 

	
 
	} else { /* LOAD game */
0 comments (0 inline, 0 general)