change threading primatives to be more sensible
authorhgn <hgodden00@gmail.com>
Tue, 8 Apr 2025 16:21:56 +0000 (17:21 +0100)
committerhgn <hgodden00@gmail.com>
Tue, 8 Apr 2025 16:21:56 +0000 (17:21 +0100)
src/addon.c
src/addon.h
src/ent_skateshop.c
src/network.c
src/player.c
src/player_remote.c
src/player_render.c

index eac4fcb4429b2a2fd021eee2de79ef2ada980c5d..347ad36d034aeca5294025cbfab40bcb2ae8da92 100644 (file)
@@ -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; type<k_addon_type_max; type++ )
    {
@@ -755,9 +757,9 @@ void *addon_cache_item_if_loaded( enum addon_type type, u16 id )
 void async_addon_setstate( void *_entry, u32 _state )
 {
    addon_cache_entry *entry = _entry;
-   SDL_AtomicLock( &addon_system.sl_cache_using_resources );
+   SDL_LockMutex( addon_system.cache_lock );
    entry->state = _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; type<k_addon_type_max; type++ )
    {
       struct addon_cache *cache = &addon_system.cache[type];
@@ -898,13 +900,13 @@ void addon_system_pre_update(void)
          addon_cache_entry *entry = vg_pool_item( &cache->pool, 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 );
       }
    }
 
index d0f90602387e8b43bcdc901bcac40fdc8f902cea..8725994ba0f39ee0ce75caff94f61e5c1c3a88d3 100644 (file)
@@ -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;
 
index 18249b19b5b588f1cbecefdf0ebd632e6ecb5b02..076b3e19f17439c25b91676ad64f630d6fd721cd 100644 (file)
@@ -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 )
index 4c3978daa36fced35cf7d35b723066f18ed91019..df807fbcdd8539943535e514b776f6783e12eadd 100644 (file)
@@ -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", 
index 2b184585f9dc67eeea3ed1a61ef6e406eca71cac..a34705e1e4cd7b4c1194b3579517bacdc4a5f0a1 100644 (file)
@@ -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();
 
index 4e0783983130fb22f2e6e3f8e137093fc507e517..dcbd849f6bb1a3c534784aea387bc8864d39623d 100644 (file)
@@ -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<draw_list_count; j ++ ){
       u32 index = draw_list[j];
@@ -603,7 +603,7 @@ void render_remote_players( world_instance *world, vg_camera *cam )
                      &netplayers.board_poses[ index ], k_board_shader_player );
    }
 
-   SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+   SDL_UnlockMutex( addon_system.cache_lock );
 
    if( !gliders )
       return;
index 3eb0ba1f61f605e9ba800ab0f3c717876e208edf..48d82851f6a1ce91b5f85a0271274d8651453fd4 100644 (file)
@@ -591,7 +591,7 @@ void render_playermodel( vg_camera *cam, world_instance *world,
 void player__render( vg_camera *cam )
 {
    world_instance *world = &_world.main;
-   SDL_AtomicLock( &addon_system.sl_cache_using_resources );
+   SDL_LockMutex( addon_system.cache_lock );
 
    struct player_model *model = 
       addon_cache_item_if_loaded( k_addon_type_player, 
@@ -608,7 +608,7 @@ void player__render( vg_camera *cam )
    render_board( cam, world, board, localplayer.final_mtx[localplayer.id_board],
                   &localplayer.pose.board, k_board_shader_player );
 
-   SDL_AtomicUnlock( &addon_system.sl_cache_using_resources );
+   SDL_UnlockMutex( addon_system.cache_lock );
 
    glEnable( GL_CULL_FACE );
    player_glide_render( cam, world, &localplayer.pose );