A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge remote-tracking branch 'origin/master'
[simgrid.git]
/
src
/
simix
/
smx_context_base.c
diff --git
a/src/simix/smx_context_base.c
b/src/simix/smx_context_base.c
index
88b7875
..
810ef6c
100644
(file)
--- a/
src/simix/smx_context_base.c
+++ b/
src/simix/smx_context_base.c
@@
-1,4
+1,4
@@
-/* context_base - Code factorization ac
c
ross context switching implementations */
+/* context_base - Code factorization across context switching implementations */
/* Copyright (c) 2010. The SimGrid Team.
* All rights reserved. */
/* Copyright (c) 2010. The SimGrid Team.
* All rights reserved. */
@@
-8,11
+8,14
@@
#include "xbt/function_types.h"
#include "xbt/function_types.h"
-#include "smx_context_private.h"
+#include "simix/simix.h"
+#include "simix/context.h"
+#include "simix/private.h"
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(bindings);
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(bindings);
-void smx_ctx_base_factory_init(smx_context_factory_t * factory) {
+void smx_ctx_base_factory_init(smx_context_factory_t *factory)
+{
/* instantiate the context factory */
*factory = xbt_new0(s_smx_context_factory_t, 1);
/* instantiate the context factory */
*factory = xbt_new0(s_smx_context_factory_t, 1);
@@
-21,12
+24,15
@@
void smx_ctx_base_factory_init(smx_context_factory_t * factory) {
(*factory)->free = smx_ctx_base_free;
(*factory)->stop = smx_ctx_base_stop;
(*factory)->suspend = NULL;
(*factory)->free = smx_ctx_base_free;
(*factory)->stop = smx_ctx_base_stop;
(*factory)->suspend = NULL;
- (*factory)->resume = NULL;
+ (*factory)->runall = NULL;
+ (*factory)->self = smx_ctx_base_self;
+ (*factory)->get_data = smx_ctx_base_get_data;
(*factory)->name = "base context factory";
}
(*factory)->name = "base context factory";
}
-int smx_ctx_base_factory_finalize(smx_context_factory_t * factory) {
+int smx_ctx_base_factory_finalize(smx_context_factory_t * factory)
+{
free(*factory);
*factory = NULL;
return 0;
free(*factory);
*factory = NULL;
return 0;
@@
-34,25
+40,31
@@
int smx_ctx_base_factory_finalize(smx_context_factory_t * factory) {
smx_context_t
smx_ctx_base_factory_create_context_sized(size_t size,
smx_context_t
smx_ctx_base_factory_create_context_sized(size_t size,
- xbt_main_func_t code, int argc, char** argv,
- void_f_pvoid_t cleanup_func, void* cleanup_arg)
+ xbt_main_func_t code, int argc,
+ char **argv,
+ void_pfn_smxprocess_t cleanup_func,
+ void *data)
{
smx_context_t context = xbt_malloc0(size);
{
smx_context_t context = xbt_malloc0(size);
- /* If the user provided a function for the process then use it
- otherwise is the context for maestro */
- if(code){
+ /* If the user provided a function for the process then use it.
+ Otherwise, it is the context for maestro and we should set it as the
+ current context */
+ if (code) {
context->cleanup_func = cleanup_func;
context->cleanup_func = cleanup_func;
- context->cleanup_arg = cleanup_arg;
context->argc = argc;
context->argv = argv;
context->code = code;
context->argc = argc;
context->argv = argv;
context->code = code;
+ } else {
+ SIMIX_context_set_current(context);
}
}
-
+ context->data = data;
+
return context;
}
return context;
}
-void smx_ctx_base_free(smx_context_t context) {
+void smx_ctx_base_free(smx_context_t context)
+{
int i;
if (context) {
int i;
if (context) {
@@
-69,11
+81,22
@@
void smx_ctx_base_free(smx_context_t context) {
/* free structure */
free(context);
}
/* free structure */
free(context);
}
-}
-
-void smx_ctx_base_stop(smx_context_t context) {
+}
+void smx_ctx_base_stop(smx_context_t context)
+{
if (context->cleanup_func)
if (context->cleanup_func)
- (*(context->cleanup_func)) (context->cleanup_arg);
+ (*(context->cleanup_func)) (context->data);
+ context->iwannadie = 0;
+ SIMIX_req_process_cleanup(context->data);
+}
+
+smx_context_t smx_ctx_base_self(void)
+{
+ return SIMIX_context_get_current();
+}
+void *smx_ctx_base_get_data(smx_context_t context)
+{
+ return context->data;
}
}