#include <xbt/function_types.h>
#include <xbt/future.hpp>
#include <xbt/functional.hpp>
+#include <xbt/signal.hpp>
#include <simgrid/simix.h>
XBT_PUBLIC(void) registerFunction(const char* name, ActorCodeFactory factory);
+/** These functions will be called when we detect a deadlock: any remaining process is locked on an action
+ *
+ * If these functions manage to unlock some of the processes, then the deadlock will be avoided.
+ */
+extern simgrid::xbt::signal<void()> onDeadlock;
}
}
* int argc, char **argv: parameters passed to code
* xbt_dict_t pros: properties
*/
-typedef smx_process_t (*smx_creation_func_t) (
+typedef smx_actor_t (*smx_creation_func_t) (
/* name */ const char*,
std::function<void()> code,
/* userdata */ void*,
- /* hostname */ const char*,
- /* kill_time */ double,
+ /* hostname */ sg_host_t,
/* props */ xbt_dict_t,
- /* auto_restart */ int,
- /* parent_process */ smx_process_t);
+ /* parent_process */ smx_actor_t);
extern "C"
XBT_PUBLIC(void) SIMIX_function_register_process_create(smx_creation_func_t function);
-XBT_PUBLIC(smx_process_t) simcall_process_create(const char *name,
- std::function<void()> code,
- void *data,
- const char *hostname,
- double kill_time,
- xbt_dict_t properties,
- int auto_restart);
+XBT_PUBLIC(smx_actor_t)
+simcall_process_create(const char* name, std::function<void()> code, void* data, sg_host_t host, xbt_dict_t properties);
XBT_PUBLIC(smx_timer_t) SIMIX_timer_set(double date, simgrid::xbt::Task<void()> callback);
template<class F> inline
-XBT_PUBLIC(smx_timer_t) SIMIX_timer_set(double date, F callback)
+smx_timer_t SIMIX_timer_set(double date, F callback)
{
return SIMIX_timer_set(date, simgrid::xbt::Task<void()>(std::move(callback)));
}
template<class R, class T> inline
-XBT_PUBLIC(smx_timer_t) SIMIX_timer_set(double date, R(*callback)(T*), T* arg)
+smx_timer_t SIMIX_timer_set(double date, R(*callback)(T*), T* arg)
{
return SIMIX_timer_set(date, [=](){ callback(arg); });
}