Skip to content

Commit 5ebceeb

Browse files
Teng-Shih-Weinashif
authored andcommitted
object tracing: Fix the issue that objects lost from trace list
Add a flag for identifing whether this object is on the trace list. Ensure that link any object to the trace list only one time. It will avoid the issue about lost object caused by adding a object to trace list twice. Fixes #19537 Signed-off-by: Shih-Wei Teng <[email protected]>
1 parent 13120f7 commit 5ebceeb

File tree

2 files changed

+26
-10
lines changed

2 files changed

+26
-10
lines changed

include/debug/object_tracing_common.h

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,18 @@
3333
* @param name Name of the trace list.
3434
* @param obj Object to be added in the trace list.
3535
*/
36-
#define SYS_TRACING_OBJ_INIT(name, obj) \
37-
do { \
38-
unsigned int key; \
39-
\
40-
key = irq_lock(); \
41-
(obj)->__next = _trace_list_ ## name; \
42-
_trace_list_ ## name = obj; \
43-
irq_unlock(key); \
44-
} \
36+
#define SYS_TRACING_OBJ_INIT(name, obj) \
37+
do { \
38+
unsigned int key; \
39+
\
40+
key = irq_lock(); \
41+
if (!(obj)->__linked) { \
42+
(obj)->__next = _trace_list_ ## name; \
43+
_trace_list_ ## name = obj; \
44+
(obj)->__linked = 1; \
45+
} \
46+
irq_unlock(key); \
47+
} \
4548
while (false)
4649

4750
/**

include/kernel.h

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,10 +98,14 @@ typedef struct {
9898

9999
#ifdef CONFIG_OBJECT_TRACING
100100
#define _OBJECT_TRACING_NEXT_PTR(type) struct type *__next;
101-
#define _OBJECT_TRACING_INIT .__next = NULL,
101+
#define _OBJECT_TRACING_LINKED_FLAG u8_t __linked;
102+
#define _OBJECT_TRACING_INIT \
103+
.__next = NULL, \
104+
.__linked = 0,
102105
#else
103106
#define _OBJECT_TRACING_INIT
104107
#define _OBJECT_TRACING_NEXT_PTR(type)
108+
#define _OBJECT_TRACING_LINKED_FLAG
105109
#endif
106110

107111
#ifdef CONFIG_POLL
@@ -1461,6 +1465,7 @@ struct k_timer {
14611465
void *user_data;
14621466

14631467
_OBJECT_TRACING_NEXT_PTR(k_timer)
1468+
_OBJECT_TRACING_LINKED_FLAG
14641469
};
14651470

14661471
#define Z_TIMER_INITIALIZER(obj, expiry, stop) \
@@ -1837,6 +1842,7 @@ struct k_queue {
18371842
};
18381843

18391844
_OBJECT_TRACING_NEXT_PTR(k_queue)
1845+
_OBJECT_TRACING_LINKED_FLAG
18401846
};
18411847

18421848
#define _K_QUEUE_INITIALIZER(obj) \
@@ -2559,6 +2565,7 @@ struct k_stack {
25592565
stack_data_t *base, *next, *top;
25602566

25612567
_OBJECT_TRACING_NEXT_PTR(k_stack)
2568+
_OBJECT_TRACING_LINKED_FLAG
25622569
u8_t flags;
25632570
};
25642571

@@ -3214,6 +3221,7 @@ struct k_mutex {
32143221
int owner_orig_prio;
32153222

32163223
_OBJECT_TRACING_NEXT_PTR(k_mutex)
3224+
_OBJECT_TRACING_LINKED_FLAG
32173225
};
32183226

32193227
/**
@@ -3316,6 +3324,7 @@ struct k_sem {
33163324
_POLL_EVENT;
33173325

33183326
_OBJECT_TRACING_NEXT_PTR(k_sem)
3327+
_OBJECT_TRACING_LINKED_FLAG
33193328
};
33203329

33213330
#define Z_SEM_INITIALIZER(obj, initial_count, count_limit) \
@@ -3475,6 +3484,7 @@ struct k_msgq {
34753484
u32_t used_msgs;
34763485

34773486
_OBJECT_TRACING_NEXT_PTR(k_msgq)
3487+
_OBJECT_TRACING_LINKED_FLAG
34783488
u8_t flags;
34793489
};
34803490
/**
@@ -3772,6 +3782,7 @@ struct k_mbox {
37723782
struct k_spinlock lock;
37733783

37743784
_OBJECT_TRACING_NEXT_PTR(k_mbox)
3785+
_OBJECT_TRACING_LINKED_FLAG
37753786
};
37763787
/**
37773788
* @cond INTERNAL_HIDDEN
@@ -3956,6 +3967,7 @@ struct k_pipe {
39563967
} wait_q;
39573968

39583969
_OBJECT_TRACING_NEXT_PTR(k_pipe)
3970+
_OBJECT_TRACING_LINKED_FLAG
39593971
u8_t flags; /**< Flags */
39603972
};
39613973

@@ -4133,6 +4145,7 @@ struct k_mem_slab {
41334145
u32_t num_used;
41344146

41354147
_OBJECT_TRACING_NEXT_PTR(k_mem_slab)
4148+
_OBJECT_TRACING_LINKED_FLAG
41364149
};
41374150

41384151
#define _K_MEM_SLAB_INITIALIZER(obj, slab_buffer, slab_block_size, \

0 commit comments

Comments
 (0)