From: hgn Date: Tue, 8 Apr 2025 16:21:56 +0000 (+0100) Subject: change threading primatives to be more sensible X-Git-Url: https://harrygodden.com/git/?a=commitdiff_plain;h=3dfc3065a76ea1fba18ef2fdf016a7108a2cae6c;p=carveJwlIkooP6JGAAIwe30JlM.git change threading primatives to be more sensible --- diff --git a/src/addon.c b/src/addon.c index eac4fcb..347ad36 100644 --- a/src/addon.c +++ b/src/addon.c @@ -221,6 +221,8 @@ void addon_system_init( void ) { u32 reg_size = sizeof(addon_reg)*ADDON_MOUNTED_MAX; addon_system.registry = vg_linear_alloc( vg_mem.rtmemory, reg_size ); + addon_system.cache_lock = SDL_CreateMutex(); + VG_ASSERT( addon_system.cache_lock ); for( u32 type=0; typestate = _state; - SDL_AtomicUnlock( &addon_system.sl_cache_using_resources ); + SDL_UnlockMutex( addon_system.cache_lock ); vg_success( " loaded (%s)\n", entry->reg_ptr->alias.foldername ); } @@ -841,7 +843,7 @@ static void T1_addon_cache_load_loop(void *_) { addon_cache_entry *entry = vg_pool_item( &cache->pool, id ); - SDL_AtomicLock( &addon_system.sl_cache_using_resources ); + SDL_LockMutex( addon_system.cache_lock ); if( entry->state == k_addon_cache_state_load_request ) { vg_info( "process cache load request (%u#%u, reg:%u)\n", @@ -851,11 +853,11 @@ static void T1_addon_cache_load_loop(void *_) { /* should maybe have a different value for this case */ entry->state = k_addon_cache_state_none; - SDL_AtomicUnlock( &addon_system.sl_cache_using_resources ); + SDL_UnlockMutex( addon_system.cache_lock ); continue; } - SDL_AtomicUnlock( &addon_system.sl_cache_using_resources ); + SDL_UnlockMutex( addon_system.cache_lock ); /* continue with the request */ addon_reg *reg = get_addon_from_index( type, entry->reg_index, 0,0 ); @@ -874,12 +876,12 @@ static void T1_addon_cache_load_loop(void *_) } vg_warn( "cache item did not load (%u#%u)\n", type, id ); - SDL_AtomicLock( &addon_system.sl_cache_using_resources ); + SDL_LockMutex( addon_system.cache_lock ); entry->state = k_addon_cache_state_none; - SDL_AtomicUnlock( &addon_system.sl_cache_using_resources ); + SDL_UnlockMutex( addon_system.cache_lock ); } else - SDL_AtomicUnlock( &addon_system.sl_cache_using_resources ); + SDL_UnlockMutex( addon_system.cache_lock ); } } } @@ -888,7 +890,7 @@ void addon_system_pre_update(void) { if( !vg_loader_availible() ) return; - SDL_AtomicLock( &addon_system.sl_cache_using_resources ); + SDL_LockMutex( addon_system.cache_lock ); for( u32 type=0; typepool, id ); if( entry->state == k_addon_cache_state_load_request ) { - SDL_AtomicUnlock( &addon_system.sl_cache_using_resources ); + SDL_UnlockMutex( addon_system.cache_lock ); vg_loader_start( T1_addon_cache_load_loop, NULL ); return; } } } - SDL_AtomicUnlock( &addon_system.sl_cache_using_resources ); + SDL_UnlockMutex( addon_system.cache_lock ); } /* @@ -923,14 +925,14 @@ u16 addon_cache_create_viewer( enum addon_type type, u16 reg_id ) if( cache_id ) { - SDL_AtomicLock( &addon_system.sl_cache_using_resources ); + SDL_LockMutex( addon_system.cache_lock ); addon_cache_entry *entry = vg_pool_item( pool, cache_id ); if( entry->state == k_addon_cache_state_loaded ) addon_cache_free_item( type, cache_id ); entry->state = k_addon_cache_state_load_request; - SDL_AtomicUnlock( &addon_system.sl_cache_using_resources ); + SDL_UnlockMutex( addon_system.cache_lock ); } } diff --git a/src/addon.h b/src/addon.h index d0f9060..8725994 100644 --- a/src/addon.h +++ b/src/addon.h @@ -56,7 +56,7 @@ struct addon_system size_t stride; } cache[k_addon_type_max]; - SDL_SpinLock sl_cache_using_resources; + SDL_mutex *cache_lock; } extern addon_system; diff --git a/src/ent_skateshop.c b/src/ent_skateshop.c index 18249b1..076b3e1 100644 --- a/src/ent_skateshop.c +++ b/src/ent_skateshop.c @@ -61,9 +61,9 @@ static void skateshop_async_preview_imageload( void *data, u32 len ) skaterift.rt_textures[k_skaterift_rt_workshop_preview] = vg.tex_missing; } - SDL_AtomicLock( &addon_system.sl_cache_using_resources ); + SDL_LockMutex( addon_system.cache_lock ); _skateshop.reg_loaded_preview = inf->reg; - SDL_AtomicUnlock( &addon_system.sl_cache_using_resources ); + SDL_UnlockMutex( addon_system.cache_lock ); } static void skateshop_update_preview_image_thread(void *_args) @@ -72,15 +72,15 @@ static void skateshop_update_preview_image_thread(void *_args) vg_str folder; vg_strnull( &folder, path_buf, sizeof(path_buf) ); - SDL_AtomicLock( &addon_system.sl_cache_using_resources ); + SDL_LockMutex( addon_system.cache_lock ); addon_reg *reg_preview = _skateshop.reg_preview; - SDL_AtomicUnlock( &addon_system.sl_cache_using_resources ); + SDL_UnlockMutex( addon_system.cache_lock ); if( !addon_get_content_folder( reg_preview, &folder, 1 ) ) { - SDL_AtomicLock( &addon_system.sl_cache_using_resources ); + SDL_LockMutex( addon_system.cache_lock ); _skateshop.reg_loaded_preview = reg_preview; - SDL_AtomicUnlock( &addon_system.sl_cache_using_resources ); + SDL_UnlockMutex( addon_system.cache_lock ); return; } @@ -112,9 +112,9 @@ static void skateshop_update_preview_image_thread(void *_args) { vg_error( "Path too long to workshop preview image.\n" ); - SDL_AtomicLock( &addon_system.sl_cache_using_resources ); + SDL_LockMutex( addon_system.cache_lock ); _skateshop.reg_loaded_preview = reg_preview; - SDL_AtomicUnlock( &addon_system.sl_cache_using_resources ); + SDL_UnlockMutex( addon_system.cache_lock ); } } @@ -123,13 +123,13 @@ void skateshop_world_preview_preupdate(void) /* try to load preview image if we availible to do. */ if( vg_loader_availible() ) { - SDL_AtomicLock( &addon_system.sl_cache_using_resources ); + SDL_LockMutex( addon_system.cache_lock ); if( _skateshop.reg_preview != _skateshop.reg_loaded_preview ) { - SDL_AtomicUnlock( &addon_system.sl_cache_using_resources ); + SDL_UnlockMutex( addon_system.cache_lock ); vg_loader_start( skateshop_update_preview_image_thread, NULL ); } - else SDL_AtomicUnlock( &addon_system.sl_cache_using_resources ); + else SDL_UnlockMutex( addon_system.cache_lock ); } } @@ -406,9 +406,9 @@ void ent_skateshop_update(void) _skateshop.selected_world_id, ADDON_REG_HIDDEN ); if( change || (_skateshop.reg_preview == NULL) ){ - SDL_AtomicLock( &addon_system.sl_cache_using_resources ); + SDL_LockMutex( addon_system.cache_lock ); _skateshop.reg_preview = selected_world; - SDL_AtomicUnlock( &addon_system.sl_cache_using_resources ); + SDL_UnlockMutex( addon_system.cache_lock ); } } @@ -500,7 +500,7 @@ static void skateshop_render_boardshop( ent_skateshop *shop, vg_camera *cam ) *mark_display = af_arritm( &world->ent_marker, mdl_entity_id_id(shop->boards.id_display)); - SDL_AtomicLock( &addon_system.sl_cache_using_resources ); + SDL_LockMutex( addon_system.cache_lock ); struct addon_cache *cache = &addon_system.cache[k_addon_type_board]; /* Render loaded boards in the view slots */ @@ -593,7 +593,7 @@ fade_out:; if( !reg ) { - SDL_AtomicUnlock( &addon_system.sl_cache_using_resources ); + SDL_UnlockMutex( addon_system.cache_lock ); _skateshop.render.item_title = ""; _skateshop.render.item_desc = ""; return; @@ -641,7 +641,7 @@ fade_out:; m4x3_mul( mtext, mlocal, mmdl ); font3d_simple_draw( 0, _skateshop.render.item_desc, cam, mmdl ); - SDL_AtomicUnlock( &addon_system.sl_cache_using_resources ); + SDL_UnlockMutex( addon_system.cache_lock ); } static void skateshop_render_charshop( ent_skateshop *shop, vg_camera *cam ) diff --git a/src/network.c b/src/network.c index 4c3978d..df807fb 100644 --- a/src/network.c +++ b/src/network.c @@ -174,10 +174,10 @@ void network_send_item( enum netmsg_playeritem_type type ) struct addon_cache *cache = &addon_system.cache[addon_type]; vg_pool *pool = &cache->pool; - SDL_AtomicLock( &addon_system.sl_cache_using_resources ); + SDL_LockMutex( addon_system.cache_lock ); addon_cache_entry *entry = vg_pool_item( pool, view_id ); addon_alias_uid( &entry->reg_ptr->alias, item->uid ); - SDL_AtomicUnlock( &addon_system.sl_cache_using_resources ); + SDL_UnlockMutex( addon_system.cache_lock ); } vg_info( "send equip: [%u] %s\n", diff --git a/src/player.c b/src/player.c index 2b18458..a34705e 100644 --- a/src/player.c +++ b/src/player.c @@ -164,8 +164,7 @@ void player__update(void) void player__post_update(void) { - struct player_subsystem_interface *sys = - player_subsystems[ localplayer.subsystem ]; + struct player_subsystem_interface *sys = player_subsystems[ localplayer.subsystem ]; if( sys->post_update ) sys->post_update(); diff --git a/src/player_remote.c b/src/player_remote.c index 4e07839..dcbd849 100644 --- a/src/player_remote.c +++ b/src/player_remote.c @@ -581,7 +581,7 @@ void render_remote_players( world_instance *world, vg_camera *cam ) struct skeleton *sk = &localplayer.skeleton; - SDL_AtomicLock( &addon_system.sl_cache_using_resources ); + SDL_LockMutex( addon_system.cache_lock ); for( u32 j=0; j