xbt_assert(isfinite(computation_amount[i]), "computation_amount[%d] is not finite!", i);
for (j = 0 ; j < host_nb ; ++j) {
xbt_assert(isfinite(communication_amount[i + host_nb * j]),
- "communication_amount[%d+%d*%d] is not finite!", i, host_nb, j);
+ "communication_amount[%d+%d*%d] is not finite!", i, host_nb, j);
}
}
* \param data a pointer to any data one may want to attach to the new object. It is for user-level information and can be NULL.
* It can be retrieved with the function \ref simcall_process_get_data.
* \param hostname name of the host where the new agent is executed.
+ * \param kill_time time when the process is killed
* \param argc first argument passed to \a code
* \param argv second argument passed to \a code
* \param properties the properties of the process
xbt_main_func_t code,
void *data,
const char *hostname,
+ double kill_time,
int argc, char **argv,
xbt_dict_t properties)
{
simcall->process_create.code = code;
simcall->process_create.data = data;
simcall->process_create.hostname = hostname;
+ simcall->process_create.kill_time = kill_time;
simcall->process_create.argc = argc;
simcall->process_create.argv = argv;
simcall->process_create.properties = properties;
}
}
+/**
+ * \brief Set the kill time of a process.
+ *
+ * \param process a process
+ * \param kill_time a double
+ */
+void simcall_process_set_kill_time(smx_process_t process, double kill_time)
+{
+
+ if (kill_time > SIMIX_get_clock()) {
+ if (simix_global->kill_process_function) {
+ XBT_DEBUG("Set kill time %f for process %s(%s)",kill_time, process->name,
+ process->smx_host->name);
+ SIMIX_timer_set(kill_time, simix_global->kill_process_function, process);
+ }
+ }
+}
+
/**
* \brief Return the location on which an agent is running.
*
* to create the SIMIX action. It can raise a host_error exception if the
* host crashed. The default SIMIX name of the action is "sleep".
*
- * \param duration Time duration of the sleep.
- * \return A result telling whether the sleep was successful
+ * \param duration Time duration of the sleep.
+ * \return A result telling whether the sleep was successful
*/
e_smx_state_t simcall_process_sleep(double duration)
{
smx_mutex_t simcall_mutex_init(void)
{
+ if(!simix_global) {
+ fprintf(stderr,"You must run MSG_init or gras_init before using MSG or GRAS\n"); // I would have loved using xbt_die but I can't since it is not initialized yet... :)
+ abort();
+ }
smx_simcall_t simcall = SIMIX_simcall_mine();
simcall->call = SIMCALL_MUTEX_INIT;
return simcall->sem_get_capacity.result;
}
-size_t simcall_file_read(const char* storage, void* ptr, size_t size, size_t nmemb, smx_file_t stream)
+double simcall_file_read(void* ptr, size_t size, size_t nmemb, smx_file_t stream)
{
smx_simcall_t simcall = SIMIX_simcall_mine();
simcall->call = SIMCALL_FILE_READ;
- simcall->file_read.storage = storage;
simcall->file_read.ptr = ptr;
simcall->file_read.size = size;
simcall->file_read.nmemb = nmemb;
return simcall->file_read.result;
}
-size_t simcall_file_write(const char* storage, const void* ptr, size_t size, size_t nmemb, smx_file_t stream)
+size_t simcall_file_write(const void* ptr, size_t size, size_t nmemb, smx_file_t stream)
{
smx_simcall_t simcall = SIMIX_simcall_mine();
simcall->call = SIMCALL_FILE_WRITE;
- simcall->file_write.storage = storage;
simcall->file_write.ptr = ptr;
simcall->file_write.size = size;
simcall->file_write.nmemb = nmemb;
return simcall->file_write.result;
}
-smx_file_t simcall_file_open(const char* storage, const char* path, const char* mode)
+smx_file_t simcall_file_open(const char* mount, const char* path, const char* mode)
{
smx_simcall_t simcall = SIMIX_simcall_mine();
simcall->call = SIMCALL_FILE_OPEN;
- simcall->file_open.storage = storage;
+ simcall->file_open.mount = mount;
simcall->file_open.path = path;
simcall->file_open.mode = mode;
SIMIX_simcall_push(simcall->issuer);
return simcall->file_open.result;
}
-int simcall_file_close(const char* storage, smx_file_t fp)
+int simcall_file_close(smx_file_t fp)
{
smx_simcall_t simcall = SIMIX_simcall_mine();
simcall->call = SIMCALL_FILE_CLOSE;
- simcall->file_close.storage = storage;
simcall->file_close.fp = fp;
SIMIX_simcall_push(simcall->issuer);
return simcall->file_close.result;
}
-int simcall_file_stat(const char* storage, smx_file_t fd, s_file_stat_t *buf)
+int simcall_file_stat(smx_file_t fd, s_file_stat_t *buf)
{
smx_simcall_t simcall = SIMIX_simcall_mine();
simcall->call = SIMCALL_FILE_STAT;
- simcall->file_stat.storage = storage;
simcall->file_stat.fd = fd;
SIMIX_simcall_push(simcall->issuer);