Fix for allocation problems

- Double allocation because of missing break
This commit is contained in:
Kevin Trogant 2024-02-28 16:34:43 +01:00
parent 8dc4f794b3
commit 36e2314f35
3 changed files with 4 additions and 1 deletions

View File

@ -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", 1); RT_CVAR_I(rt_AssetProcessingThreads, "Number of asset processing threads. Default: 4", 4);
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));
@ -421,6 +421,7 @@ rt_loaded_asset LoadAsset(rt_file_id file) {
rtLog("AC", "Failed to allocate buffer for loading %s.", path); rtLog("AC", "Failed to allocate buffer for loading %s.", path);
return (rt_loaded_asset){.buffer = NULL, .size = 0}; return (rt_loaded_asset){.buffer = NULL, .size = 0};
} }
rtLog("AC", "Allocated %p for %s", buffer, path);
rt_aio_state load_state = rtSubmitSingleLoadSync((rt_file_load){ rt_aio_state load_state = rtSubmitSingleLoadSync((rt_file_load){
.file = file, .file = file,

View File

@ -504,6 +504,7 @@ RT_ASSET_PROCESSOR_FN(PipelineProcessor) {
*new_resource_count = 1 + pipeline.shader_count; *new_resource_count = 1 + pipeline.shader_count;
} }
out: out:
rtLog("AC", "Released %p", asset.buffer);
rtReleaseBuffer(asset.buffer, asset.size); rtReleaseBuffer(asset.buffer, asset.size);
return result; return result;
} }

View File

@ -103,6 +103,7 @@ RT_DLLEXPORT void *rtAllocBuffer(size_t size) {
_bitmap[dword] |= mask; _bitmap[dword] |= mask;
result = _memory + i * BLOCK_SIZE; result = _memory + i * BLOCK_SIZE;
first_block = i; first_block = i;
break;
} }
else if (lzcnt32(_bitmap[dword]) >= alloc_blocks) { else if (lzcnt32(_bitmap[dword]) >= alloc_blocks) {
size_t first = (_bitmap[dword] != 0) ? 32 - lzcnt32(_bitmap[dword]) : 0; size_t first = (_bitmap[dword] != 0) ? 32 - lzcnt32(_bitmap[dword]) : 0;