diff options
| author | [email protected] <[email protected]> | 2011-06-12 10:01:48 +0000 |
|---|---|---|
| committer | [email protected] <[email protected]> | 2011-06-12 10:01:48 +0000 |
| commit | 864bd1180237c952beefda21266c3f76f288b99a (patch) | |
| tree | 0d437761b4efee23c50b0a6e88e6a664fd55b2cf /src/object.c | |
| parent | 8c3d1e5eaec88d77a2fe623e9d478b9542bad040 (diff) | |
Add reentrance check. Put kernel debug switch together.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1494 bbd45198-f89e-11dd-88c7-29a3b14d5316
Diffstat (limited to 'src/object.c')
| -rw-r--r-- | src/object.c | 53 |
1 files changed, 46 insertions, 7 deletions
diff --git a/src/object.c b/src/object.c index 65551ca6a7..75c59e33cb 100644 --- a/src/object.c +++ b/src/object.c @@ -84,7 +84,15 @@ void (*rt_object_put_hook)(struct rt_object* object); */ void rt_object_attach_sethook(void (*hook)(struct rt_object* object)) { + register rt_base_t temp; + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + rt_object_attach_hook = hook; + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); } /** @@ -95,7 +103,15 @@ void rt_object_attach_sethook(void (*hook)(struct rt_object* object)) */ void rt_object_detach_sethook(void (*hook)(struct rt_object* object)) { + register rt_base_t temp; + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + rt_object_detach_hook = hook; + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); } /** @@ -113,7 +129,15 @@ void rt_object_detach_sethook(void (*hook)(struct rt_object* object)) */ void rt_object_trytake_sethook(void (*hook)(struct rt_object* object)) { + register rt_base_t temp; + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + rt_object_trytake_hook = hook; + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); } /** @@ -132,7 +156,15 @@ void rt_object_trytake_sethook(void (*hook)(struct rt_object* object)) */ void rt_object_take_sethook(void (*hook)(struct rt_object* object)) { + register rt_base_t temp; + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + rt_object_take_hook = hook; + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); } /** @@ -143,7 +175,15 @@ void rt_object_take_sethook(void (*hook)(struct rt_object* object)) */ void rt_object_put_sethook(void (*hook)(struct rt_object* object)) { + register rt_base_t temp; + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + rt_object_put_hook = hook; + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); } /*@}*/ @@ -199,10 +239,7 @@ void rt_object_init(struct rt_object* object, enum rt_object_class_type type, co } #ifdef RT_USING_HOOK - if (rt_object_attach_hook != RT_NULL) - { - rt_object_attach_hook(object); - } + RT_OBJECT_HOOK_CALL2(rt_object_attach_hook,object); #endif /* lock interrupt */ @@ -229,7 +266,7 @@ void rt_object_detach(rt_object_t object) RT_ASSERT(object != RT_NULL); #ifdef RT_USING_HOOK - if (rt_object_detach_hook != RT_NULL) rt_object_detach_hook(object); + RT_OBJECT_HOOK_CALL2(rt_object_detach_hook,object); #endif /* lock interrupt */ @@ -257,6 +294,8 @@ rt_object_t rt_object_allocate(enum rt_object_class_type type, const char* name) register rt_base_t temp; struct rt_object_information* information; + RT_DEBUG_NOT_REENT + #ifdef RT_USING_MODULE /* get module object information, module object should be managed by kernel object container */ information = (rt_module_self() != RT_NULL && (type != RT_Object_Class_Module)) ? @@ -296,7 +335,7 @@ rt_object_t rt_object_allocate(enum rt_object_class_type type, const char* name) } #ifdef RT_USING_HOOK - if (rt_object_attach_hook != RT_NULL) rt_object_attach_hook(object); + RT_OBJECT_HOOK_CALL2(rt_object_attach_hook,object); #endif /* lock interrupt */ @@ -326,7 +365,7 @@ void rt_object_delete(rt_object_t object) RT_ASSERT(!(object->type & RT_Object_Class_Static)); #ifdef RT_USING_HOOK - if (rt_object_detach_hook != RT_NULL) rt_object_detach_hook(object); + RT_OBJECT_HOOK_CALL2(rt_object_detach_hook,object); #endif /* lock interrupt */ |
