forked from Imagelibrary/rtems
Add ability to free information on task delete.
This commit is contained in:
@@ -79,6 +79,7 @@ static rtems_task_priority capture_ceiling;
|
|||||||
static rtems_task_priority capture_floor;
|
static rtems_task_priority capture_floor;
|
||||||
static uint32_t capture_tick_period;
|
static uint32_t capture_tick_period;
|
||||||
static rtems_id capture_reader;
|
static rtems_id capture_reader;
|
||||||
|
int rtems_capture_free_info_on_task_delete;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* RTEMS Event text.
|
* RTEMS Event text.
|
||||||
@@ -289,7 +290,7 @@ rtems_capture_create_control (rtems_name name, rtems_id id)
|
|||||||
* We need to scan the task list as set the control to the
|
* We need to scan the task list as set the control to the
|
||||||
* tasks.
|
* tasks.
|
||||||
*/
|
*/
|
||||||
for (task = capture_tasks; task != NULL; task = task->next)
|
for (task = capture_tasks; task != NULL; task = task->forw)
|
||||||
if (rtems_capture_match_name_id (name, id, task->name, task->id))
|
if (rtems_capture_match_name_id (name, id, task->name, task->id))
|
||||||
task->control = control;
|
task->control = control;
|
||||||
|
|
||||||
@@ -345,7 +346,10 @@ rtems_capture_create_capture_task (rtems_tcb* new_task)
|
|||||||
|
|
||||||
rtems_interrupt_disable (level);
|
rtems_interrupt_disable (level);
|
||||||
|
|
||||||
task->next = capture_tasks;
|
task->forw = capture_tasks;
|
||||||
|
if (task->forw)
|
||||||
|
task->forw->back = task;
|
||||||
|
task->back = NULL;
|
||||||
capture_tasks = task;
|
capture_tasks = task;
|
||||||
|
|
||||||
rtems_interrupt_enable (level);
|
rtems_interrupt_enable (level);
|
||||||
@@ -586,6 +590,19 @@ rtems_capture_delete_task (rtems_tcb* current_task,
|
|||||||
* This task's tcb will be invalid.
|
* This task's tcb will be invalid.
|
||||||
*/
|
*/
|
||||||
dt->tcb = 0;
|
dt->tcb = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Unlink
|
||||||
|
*/
|
||||||
|
if (rtems_capture_free_info_on_task_delete) {
|
||||||
|
if (dt->forw)
|
||||||
|
dt->forw->back = dt->back;
|
||||||
|
if (dt->back)
|
||||||
|
dt->back->forw = dt->forw;
|
||||||
|
else
|
||||||
|
capture_tasks = dt->forw;
|
||||||
|
_Workspace_Free (dt);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -685,7 +702,7 @@ rtems_capture_switch_task (rtems_tcb* current_task,
|
|||||||
{
|
{
|
||||||
rtems_id ct_id = current_task->Object.id;
|
rtems_id ct_id = current_task->Object.id;
|
||||||
|
|
||||||
for (ct = capture_tasks; ct; ct = ct->next)
|
for (ct = capture_tasks; ct; ct = ct->forw)
|
||||||
if (ct->id == ct_id)
|
if (ct->id == ct_id)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -926,7 +943,7 @@ rtems_capture_close ()
|
|||||||
while (task)
|
while (task)
|
||||||
{
|
{
|
||||||
rtems_capture_task_t* delete = task;
|
rtems_capture_task_t* delete = task;
|
||||||
task = task->next;
|
task = task->forw;
|
||||||
_Workspace_Free (delete);
|
_Workspace_Free (delete);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -998,7 +1015,7 @@ rtems_capture_flush (rtems_boolean prime)
|
|||||||
|
|
||||||
rtems_interrupt_disable (level);
|
rtems_interrupt_disable (level);
|
||||||
|
|
||||||
for (task = capture_tasks; task != NULL; task = task->next)
|
for (task = capture_tasks; task != NULL; task = task->forw)
|
||||||
task->flags &= ~RTEMS_CAPTURE_TRACED;
|
task->flags &= ~RTEMS_CAPTURE_TRACED;
|
||||||
|
|
||||||
if (prime)
|
if (prime)
|
||||||
@@ -1075,7 +1092,7 @@ rtems_capture_watch_del (rtems_name name, rtems_id id)
|
|||||||
{
|
{
|
||||||
rtems_interrupt_disable (level);
|
rtems_interrupt_disable (level);
|
||||||
|
|
||||||
for (task = capture_tasks; task != NULL; task = task->next)
|
for (task = capture_tasks; task != NULL; task = task->forw)
|
||||||
if (task->control == control)
|
if (task->control == control)
|
||||||
task->control = 0;
|
task->control = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -103,7 +103,8 @@ typedef struct rtems_capture_task_s
|
|||||||
uint32_t last_ticks;
|
uint32_t last_ticks;
|
||||||
uint32_t last_tick_offset;
|
uint32_t last_tick_offset;
|
||||||
rtems_capture_control_t* control;
|
rtems_capture_control_t* control;
|
||||||
struct rtems_capture_task_s* next;
|
struct rtems_capture_task_s* forw;
|
||||||
|
struct rtems_capture_task_s* back;
|
||||||
} rtems_capture_task_t;
|
} rtems_capture_task_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -191,6 +192,16 @@ rtems_status_code
|
|||||||
rtems_capture_open (uint32_t size,
|
rtems_capture_open (uint32_t size,
|
||||||
rtems_capture_timestamp timestamp);
|
rtems_capture_timestamp timestamp);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* rtems_capture_free_info_on_task_delete
|
||||||
|
*
|
||||||
|
* DESCRIPTION:
|
||||||
|
*
|
||||||
|
* If non-zero task informaion if freed when a task is deleted.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
extern int rtems_capture_free_info_on_task_delete;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* rtems_capture_close
|
* rtems_capture_close
|
||||||
*
|
*
|
||||||
@@ -458,7 +469,7 @@ rtems_capture_get_task_list ();
|
|||||||
static inline rtems_capture_task_t*
|
static inline rtems_capture_task_t*
|
||||||
rtems_capture_next_task (rtems_capture_task_t* task)
|
rtems_capture_next_task (rtems_capture_task_t* task)
|
||||||
{
|
{
|
||||||
return task->next;
|
return task->forw;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user