- r_init();
- application_handler_class = rb_funcall3(rb_const_get(rb_cObject, rb_intern("ApplicationHandler")), rb_intern("new"), 0, 0);
- rb_funcall(application_handler_class,rb_intern("onStartDocument"),0);
- #ifdef MY_DEBUG
- printf ("application_handler_on_start_document ...Done\n" );
- #endif
+ //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);
+}
+
+
+
+
+void rb_application_handler_on_start_document(void) {