Use the completion callback to wait
The memory allocated is freed after the spawned function is executed.
This commit is contained in:
parent
7d7c59bbf8
commit
d0a47783f2
@ -15,6 +15,9 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
#include "compat.h"
|
||||||
|
|
||||||
|
volatile int complete = 0;
|
||||||
|
|
||||||
static double
|
static double
|
||||||
get_time_ms(void)
|
get_time_ms(void)
|
||||||
@ -42,11 +45,19 @@ polling_func(void *arg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
complete_func(void *arg)
|
||||||
|
{
|
||||||
|
UNUSED(arg);
|
||||||
|
complete = 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Call the nanos6_spawn_function from an external thread */
|
/* Call the nanos6_spawn_function from an external thread */
|
||||||
static void *
|
static void *
|
||||||
spawn(void *arg)
|
spawn(void *arg)
|
||||||
{
|
{
|
||||||
nanos6_spawn_function(polling_func, arg, NULL, NULL, "polling_task");
|
nanos6_spawn_function(polling_func, arg,
|
||||||
|
complete_func, NULL, "polling_task");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,5 +82,10 @@ main(void)
|
|||||||
|
|
||||||
#pragma oss taskwait
|
#pragma oss taskwait
|
||||||
|
|
||||||
|
while (!complete)
|
||||||
|
sleep_us(100);
|
||||||
|
|
||||||
|
free(T);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
#include "compat.h"
|
#include "compat.h"
|
||||||
#include "ovni.h"
|
#include "ovni.h"
|
||||||
|
|
||||||
|
volatile int complete = 0;
|
||||||
|
|
||||||
static double
|
static double
|
||||||
get_time_ms(void)
|
get_time_ms(void)
|
||||||
{
|
{
|
||||||
@ -44,6 +46,13 @@ polling_func(void *arg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
complete_func(void *arg)
|
||||||
|
{
|
||||||
|
UNUSED(arg);
|
||||||
|
complete = 1;
|
||||||
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
instr_thread_start(int32_t cpu, int32_t creator_tid, uint64_t tag)
|
instr_thread_start(int32_t cpu, int32_t creator_tid, uint64_t tag)
|
||||||
{
|
{
|
||||||
@ -82,7 +91,8 @@ spawn(void *arg)
|
|||||||
/* Inform ovni of this external thread */
|
/* Inform ovni of this external thread */
|
||||||
instr_thread_start(-1, -1, 0);
|
instr_thread_start(-1, -1, 0);
|
||||||
|
|
||||||
nanos6_spawn_function(polling_func, arg, NULL, NULL, "polling_task");
|
nanos6_spawn_function(polling_func, arg,
|
||||||
|
complete_func, NULL, "polling_task");
|
||||||
|
|
||||||
/* Then inform that the thread finishes */
|
/* Then inform that the thread finishes */
|
||||||
instr_thread_end();
|
instr_thread_end();
|
||||||
@ -111,5 +121,10 @@ main(void)
|
|||||||
|
|
||||||
#pragma oss taskwait
|
#pragma oss taskwait
|
||||||
|
|
||||||
|
while (!complete)
|
||||||
|
sleep_us(100);
|
||||||
|
|
||||||
|
free(T);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,9 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
#include "compat.h"
|
||||||
|
|
||||||
|
volatile int complete = 0;
|
||||||
|
|
||||||
static double
|
static double
|
||||||
get_time_ms(void)
|
get_time_ms(void)
|
||||||
@ -39,6 +42,13 @@ polling_func(void *arg)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
complete_func(void *arg)
|
||||||
|
{
|
||||||
|
UNUSED(arg);
|
||||||
|
complete = 1;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
main(void)
|
main(void)
|
||||||
{
|
{
|
||||||
@ -48,12 +58,18 @@ main(void)
|
|||||||
|
|
||||||
*T = 100.0;
|
*T = 100.0;
|
||||||
|
|
||||||
nanos6_spawn_function(polling_func, T, NULL, NULL, "polling_task");
|
nanos6_spawn_function(polling_func, T,
|
||||||
|
complete_func, NULL, "polling_task");
|
||||||
|
|
||||||
#pragma oss task label("dummy_task")
|
#pragma oss task label("dummy_task")
|
||||||
dummy_work(*T);
|
dummy_work(*T);
|
||||||
|
|
||||||
#pragma oss taskwait
|
#pragma oss taskwait
|
||||||
|
|
||||||
|
while (!complete)
|
||||||
|
sleep_us(100);
|
||||||
|
|
||||||
|
free(T);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user