fix long standing grind bug
[carveJwlIkooP6JGAAIwe30JlM.git] / skaterift.h
index ca31f237817bef194a66b383a6266c2840f51858..8f9e3e7596cd4871dd77ca5417f5e7f6036940c2 100644 (file)
@@ -11,11 +11,12 @@ struct{
       k_async_op_world_preloading,
       k_async_op_world_loading,
       k_async_op_world_scan,
+      k_async_op_world_load_preview,
+      k_async_op_board_scan,
+      k_async_op_board_load,
       k_workshop_form_op_loading_model,
       k_workshop_form_op_downloading_submission,
       k_workshop_form_op_publishing_update,
-      k_workshop_op_item_scan,
-      k_workshop_op_item_load
    }
    async_op;
 }
@@ -31,6 +32,10 @@ static int  skaterift_change_world_command( int argc, const char *argv[] );
  */
 VG_STATIC void skaterift_begin_op( enum async_operation op )
 {
+   if( vg_thread_purpose() == k_thread_purpose_loader ){
+      vg_fatal_error( "Can't do that here\n" );
+   }
+
    if( skaterift.async_op != k_async_op_none ){
       vg_fatal_error( "Async executing op(%d), tried to start op(%d)\n", 
                        skaterift.async_op, op );
@@ -53,13 +58,23 @@ VG_STATIC void skaterift_shift_op( enum async_operation op )
    vg_info( "Shifting to op( %d )\n", op );
 }
 
+VG_STATIC void skaterift_end_op(void);
+VG_STATIC void async_skaterift_end_op( void *data, u32 size ){
+   skaterift_end_op();
+}
+
 /*
  * Finished operation, otheres can now run
  */
 VG_STATIC void skaterift_end_op(void)
 {
-   vg_info( "Finishing op( %d )\n", skaterift.async_op );
-   skaterift.async_op = k_async_op_none;
+   if( vg_thread_purpose() == k_thread_purpose_loader ){
+      vg_async_call( async_skaterift_end_op, NULL, 0 );
+   }
+   else{
+      vg_info( "Finishing op( %d )\n", skaterift.async_op );
+      skaterift.async_op = k_async_op_none;
+   }
 }
 
 #endif /* SKATERIFT_H */