}
-// processCreate
-// FIXME: don't mess with MSG internals here, use MSG_process_create_with_arguments()
-
-void rb_process_create(VALUE class,VALUE ruby_process,VALUE host) {
- VALUE rbName; // Name of ruby Process instance
- m_process_t process; // Native Process to Create
- const char * name ; // Name of C Native Process
- rbName = rb_process_getName(ruby_process);
-
- if(!rbName)
- rb_raise(rb_eRuntimeError,"Internal error: Process name cannot be NULL");
-
- // Allocate the data for the simulation
- process = xbt_new0(s_m_process_t,1);
- process->simdata = xbt_new0(s_simdata_process_t,1);
- // Do we Really Need to Create Ruby Process Instance , >> process is already a Ruby Process !! So..Keep on ;)
- // Bind The Ruby Process instance to The Native Process
- rb_process_bind(ruby_process,process);
- name = RSTRING(rbName)->ptr;
- process->name = xbt_strdup(name);
- Data_Get_Struct(host,s_m_host_t,process->simdata->m_host);
-
- if(!(process->simdata->m_host)) { // Not Binded
- free(process->simdata);
- free(process->data);
- free(process);
- rb_raise(rb_eRuntimeError,"Host not bound while creating native process");
- }
- process->simdata->PID = msg_global->PID++; // msg_global ??
-
- DEBUG7("fill in process %s/%s (pid=%d) %p (sd=%p , host=%p, host->sd=%p)",
- process->name , process->simdata->m_host->name,process->simdata->PID,
- process,process->simdata, process->simdata->m_host,
- process->simdata->m_host->simdata);
-
- /* FIXME: that's mainly for debugging. We could only allocate this if XBT_LOG_ISENABLED(ruby,debug) is true since I guess this leaks */
- char **argv=xbt_new(char*,2);
- argv[0] = bprintf("%s@%s",process->name,process->simdata->m_host->simdata->smx_host->name);
- argv[1] = NULL;
- process->simdata->s_process =
- SIMIX_process_create(process->name,
- (xbt_main_func_t)ruby_process,
- (void *) process,
- process->simdata->m_host->simdata->smx_host->name,
- 1,argv,NULL);
-
- DEBUG1("context created (s_process=%p)",process->simdata->s_process);
-
- if (SIMIX_process_self()) { // SomeOne Created Me !!
- process->simdata->PPID = MSG_process_get_PID(SIMIX_process_self()->data);
- } else {
- process->simdata->PPID = -1;
- }
- process->simdata->last_errno = MSG_OK;
- // let's Add the Process to the list of the Simulation's Processes
- xbt_fifo_unshift(msg_global->process_list,process);
-}
-
-
// Process Management
void rb_process_suspend(VALUE class,VALUE ruby_process) {