- smx_process_t process;
- while((process = xbt_swag_extract(processes))){
- xbt_tpool_queue_job(tpool, (void_f_pvoid_t)smx_ctx_sysv_resume, process->context);
- }
+ smx_context_t context = process->context;
+ smx_current_context = (smx_context_t)context;
+ int rv;
+ rv = swapcontext(&((smx_ctx_sysv_t)context)->old_uc, &((smx_ctx_sysv_t) context)->uc);
+ smx_current_context = (smx_context_t)maestro_context;
+
+ xbt_assert((rv == 0), "Context swapping failure");
+}
+
+void smx_ctx_sysv_runall_parallel(xbt_dynar_t processes)
+{
+#ifdef CONTEXT_THREADS
+ xbt_parmap_apply(parmap, (void_f_pvoid_t)smx_ctx_sysv_resume_parallel, processes);
+#endif
+ xbt_dynar_reset(processes);
+}
+
+smx_context_t smx_ctx_sysv_self_parallel(void)
+{
+ /*smx_context_t self_context = (smx_context_t) xbt_os_thread_get_extra_data();
+ return self_context ? self_context : (smx_context_t) maestro_context;*/
+ return smx_current_context;
+}
+
+int smx_ctx_sysv_get_thread_id(void)
+{
+ return (int)(unsigned long)xbt_os_thread_get_extra_data();