Workaround for memory corruption in asset processor
Somehow the asset processor threads corrupt each others memory - replace the asset of thread X with the asset of thread Y. Weird.
This commit is contained in:
		
							parent
							
								
									9d2987121e
								
							
						
					
					
						commit
						8dc4f794b3
					
				@ -49,7 +49,7 @@ typedef struct {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
RT_CVAR_S(rt_AssetDirectory, "Name of the asset directory. Default: assets", "assets");
 | 
					RT_CVAR_S(rt_AssetDirectory, "Name of the asset directory. Default: assets", "assets");
 | 
				
			||||||
RT_CVAR_I(rt_AssetDBSize, "Size of the asset database. Default: 1024", 1024);
 | 
					RT_CVAR_I(rt_AssetDBSize, "Size of the asset database. Default: 1024", 1024);
 | 
				
			||||||
RT_CVAR_I(rt_AssetProcessingThreads, "Number of asset processing threads. Default: 4", 4);
 | 
					RT_CVAR_I(rt_AssetProcessingThreads, "Number of asset processing threads. Default: 4", 1);
 | 
				
			||||||
RT_CVAR_I(rt_AssetProcessorArenaSize,
 | 
					RT_CVAR_I(rt_AssetProcessorArenaSize,
 | 
				
			||||||
          "Size of the per-thread asset processor arena. Default: 128 MiB",
 | 
					          "Size of the per-thread asset processor arena. Default: 128 MiB",
 | 
				
			||||||
          (int)RT_MB(128));
 | 
					          (int)RT_MB(128));
 | 
				
			||||||
@ -394,9 +394,8 @@ static void ProcessorThreadEntry(void *param) {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RT_DLLEXPORT void rtWaitForAssetProcessing(void) {
 | 
					RT_DLLEXPORT void rtWaitForAssetProcessing(void) {
 | 
				
			||||||
    int turns = 5;
 | 
					    int turns = 10;
 | 
				
			||||||
    while (turns > 0) {
 | 
					    while (turns > 0) {
 | 
				
			||||||
        rtSleep(100);
 | 
					 | 
				
			||||||
        int in_processing_count = 0;
 | 
					        int in_processing_count = 0;
 | 
				
			||||||
        for (int i = 0; i < rt_AssetDBSize.i; ++i) {
 | 
					        for (int i = 0; i < rt_AssetDBSize.i; ++i) {
 | 
				
			||||||
            rtLockRead(&_asset_db.lock);
 | 
					            rtLockRead(&_asset_db.lock);
 | 
				
			||||||
@ -404,8 +403,10 @@ RT_DLLEXPORT void rtWaitForAssetProcessing(void) {
 | 
				
			|||||||
                ++in_processing_count;
 | 
					                ++in_processing_count;
 | 
				
			||||||
            rtUnlockRead(&_asset_db.lock);
 | 
					            rtUnlockRead(&_asset_db.lock);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (!in_processing_count)
 | 
					        if (!in_processing_count) {
 | 
				
			||||||
            --turns;
 | 
					            --turns;
 | 
				
			||||||
 | 
					            rtSleep(250);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user