-//* Copyright (c) 2002,2003,2004 Arnaud Legrand. All rights reserved. */
+/* Copyright (c) 2007, 2008, 2009, 2010. The SimGrid Team.
+ * All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
DEBUG2("Start process %s on host %s", name, hostname);
if (!SIMIX_host_get_state(host)) {
- WARN2("Cannot launch process '%s' on failed host '%s'", name, hostname);
+ WARN2("Cannot launch process '%s' on failed host '%s'", name,
+ hostname);
return NULL;
}
process = xbt_new0(s_smx_process_t, 1);
*/
void SIMIX_process_kill(smx_process_t process)
{
- DEBUG2("Killing process %s on %s", process->name, process->smx_host->name);
+ DEBUG2("Killing process %s on %s", process->name,
+ process->smx_host->name);
process->iwannadie = 1;
if (process->cond)
xbt_swag_remove(process, process->cond->sleeping);
if (process->waiting_action) {
- SIMIX_unregister_action_to_condition(process->waiting_action, process->cond);
+ SIMIX_unregister_action_to_condition(process->waiting_action,
+ process->cond);
SIMIX_action_destroy(process->waiting_action);
}
if (process->sem) {
- xbt_swag_remove(process, process->sem->sleeping);
+ xbt_fifo_remove(process->sem->sleeping, process);
if (process->waiting_action) {
- SIMIX_unregister_action_to_semaphore(process->waiting_action, process->sem);
+ SIMIX_unregister_action_to_semaphore(process->waiting_action,
+ process->sem);
SIMIX_action_destroy(process->waiting_action);
}
}
} else {
DEBUG4("%s(%p) here! killing %s(%p)",
- simix_global->current_process->name,simix_global->current_process,
- process->name,process);
+ simix_global->current_process->name,
+ simix_global->current_process, process->name, process);
/* Cleanup if it were waiting for something */
if (process->mutex) {
xbt_swag_remove(process, process->cond->sleeping);
if (process->waiting_action) {
- SIMIX_unregister_action_to_condition(process->waiting_action, process->cond);
+ SIMIX_unregister_action_to_condition(process->waiting_action,
+ process->cond);
SIMIX_action_destroy(process->waiting_action);
}
process->cond = NULL;
}
if (process->sem) {
- xbt_swag_remove(process, process->sem->sleeping);
+ xbt_fifo_remove(process->sem->sleeping, process);
if (process->waiting_action) {
- SIMIX_unregister_action_to_semaphore(process->waiting_action, process->sem);
- SIMIX_action_destroy(process->waiting_action);
+ SIMIX_unregister_action_to_semaphore(process->waiting_action,
+ process->sem);
+ SIMIX_action_destroy(process->waiting_action);
}
process->sem = NULL;
}
*/
XBT_INLINE smx_process_t SIMIX_process_self(void)
{
- return simix_global ? simix_global->current_process : NULL;
+ if (simix_global)
+ return simix_global->current_process;
+ return NULL;
}
/**
void SIMIX_process_change_host(smx_process_t process, char *source,
char *dest)
{
+ smx_host_t h1 = NULL;
+ smx_host_t h2 = NULL;
xbt_assert0((process != NULL), "Invalid parameters");
- smx_host_t h1 = SIMIX_host_get_by_name(source);
- smx_host_t h2 = SIMIX_host_get_by_name(dest);
+ h1 = SIMIX_host_get_by_name(source);
+ h2 = SIMIX_host_get_by_name(dest);
process->smx_host = h2;
xbt_swag_remove(process, h1->process_list);
xbt_swag_insert(process, h2->process_list);
void SIMIX_process_schedule(smx_process_t new_process)
{
- xbt_assert0(simix_global->current_process == simix_global->maestro_process,
- "This function can only be called from maestro context");
+ xbt_assert0(simix_global->current_process ==
+ simix_global->maestro_process,
+ "This function can only be called from maestro context");
DEBUG1("Scheduling context: '%s'", new_process->name);
/* update the current process */