saveload.c
changeset 2283 defd5403139a
parent 2186 db48cf29b983
child 2285 410dedcf46d1
equal deleted inserted replaced
2282:4efa6c94ef64 2283:defd5403139a
  1290 	assert(_ts.count == _sl.offs_base);
  1290 	assert(_ts.count == _sl.offs_base);
  1291 	GetSavegameFormat("memory")->uninit_write(); // clean the memorypool
  1291 	GetSavegameFormat("memory")->uninit_write(); // clean the memorypool
  1292 	fclose(_sl.fh);
  1292 	fclose(_sl.fh);
  1293 
  1293 
  1294 	SaveFileDone();
  1294 	SaveFileDone();
  1295 	if (*(bool*)ptr) CloseOTTDThread();
       
  1296 	return true;
  1295 	return true;
  1297 }
  1296 }
  1298 
  1297 
  1299 /**
  1298 /**
  1300  * Main Save or Load function where the high-level saveload functions are
  1299  * Main Save or Load function where the high-level saveload functions are
  1362 	version = 0;
  1361 	version = 0;
  1363 
  1362 
  1364 	/* General tactic is to first save the game to memory, then use an available writer
  1363 	/* General tactic is to first save the game to memory, then use an available writer
  1365 	 * to write it to file, either in threaded mode if possible, or single-threaded */
  1364 	 * to write it to file, either in threaded mode if possible, or single-threaded */
  1366 	if (mode == SL_SAVE) { /* SAVE game */
  1365 	if (mode == SL_SAVE) { /* SAVE game */
  1367 		bool threaded = true;
       
  1368 		fmt = GetSavegameFormat("memory"); // write to memory
  1366 		fmt = GetSavegameFormat("memory"); // write to memory
  1369 
  1367 
  1370 		_sl.write_bytes = fmt->writer;
  1368 		_sl.write_bytes = fmt->writer;
  1371 		_sl.excpt_uninit = fmt->uninit_write;
  1369 		_sl.excpt_uninit = fmt->uninit_write;
  1372 		if (!fmt->init_write()) {
  1370 		if (!fmt->init_write()) {
  1379 		BeforeSaveGame();
  1377 		BeforeSaveGame();
  1380 		SlSaveChunks();
  1378 		SlSaveChunks();
  1381 		SlWriteFill(); // flush the save buffer
  1379 		SlWriteFill(); // flush the save buffer
  1382 
  1380 
  1383 		/* Write to file */
  1381 		/* Write to file */
  1384 		if (_network_server || !CreateOTTDThread(&SaveFileToDisk, &threaded)) {
  1382 		if (_network_server || !CreateOTTDThread(&SaveFileToDisk, NULL)) {
  1385 			DEBUG(misc, 1) ("cannot create savegame thread, reverting to single-threaded mode...");
  1383 			DEBUG(misc, 1) ("cannot create savegame thread, reverting to single-threaded mode...");
  1386 			threaded = false;
  1384 			SaveFileToDisk(NULL);
  1387 			SaveFileToDisk(&threaded);
       
  1388 		}
  1385 		}
  1389 
  1386 
  1390 	} else { /* LOAD game */
  1387 	} else { /* LOAD game */
  1391 		assert(mode == SL_LOAD);
  1388 		assert(mode == SL_LOAD);
  1392 
  1389