Changeset 0fd6f255 in rtems
- Timestamp:
- Jul 8, 2016, 2:58:48 PM (5 years ago)
- Branches:
- 5, master
- Children:
- ba5de753
- Parents:
- 3ae199a
- git-author:
- Sebastian Huber <sebastian.huber@…> (07/08/16 14:58:48)
- git-committer:
- Sebastian Huber <sebastian.huber@…> (07/25/16 06:40:14)
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
cpukit/score/src/threadhandler.c
r3ae199a r0fd6f255 60 60 61 61 /* 62 * Take care that 'begin' extensions get to complete before63 * 'switch' extensions can run. This means must keep dispatch64 * disabled until all 'begin' extensions complete.65 */66 _User_extensions_Thread_begin( executing );67 68 /*69 62 * Do not use the level of the thread control block, since it has a 70 63 * different format. … … 85 78 */ 86 79 _Thread_Do_dispatch( cpu_self, level ); 80 81 /* 82 * Invoke the thread begin extensions in the context of the thread entry 83 * function with thread dispatching enabled. This enables use of dynamic 84 * memory allocation, creation of POSIX keys and use of C++ thread local 85 * storage. Blocking synchronization primitives are allowed also. 86 */ 87 _User_extensions_Thread_begin( executing ); 87 88 88 89 /* -
testsuites/sptests/spextensions01/init.c
r3ae199a r0fd6f255 26 26 #include <bsp.h> 27 27 28 #include <rtems/score/apimutex.h> 29 #include <rtems/score/sysstate.h> 30 #include <rtems/score/threaddispatch.h> 31 28 32 const char rtems_test_name[] = "SPEXTENSIONS 1"; 29 33 … … 33 37 34 38 static rtems_id master_task; 39 40 static bool before_multitasking(void) 41 { 42 return _System_state_Is_before_multitasking(_System_state_Get()); 43 } 44 45 static bool life_protected(void) 46 { 47 Thread_Control *executing; 48 49 executing = _Thread_Get_executing(); 50 51 return (executing->Life.state & THREAD_LIFE_PROTECTED) != 0; 52 } 53 54 static void assert_normal_thread_context(void) 55 { 56 assert(_Thread_Dispatch_is_enabled()); 57 assert(!_RTEMS_Allocator_is_owner()); 58 assert(!life_protected()); 59 } 60 61 static void assert_life_protected_thread_context(void) 62 { 63 assert(_Thread_Dispatch_is_enabled() || before_multitasking()); 64 assert(!_RTEMS_Allocator_is_owner()); 65 assert(life_protected() || before_multitasking()); 66 } 67 68 static void assert_allocator_protected_thread_context(void) 69 { 70 assert(_Thread_Dispatch_is_enabled() || before_multitasking()); 71 assert(_RTEMS_Allocator_is_owner()); 72 assert(life_protected() || before_multitasking()); 73 } 74 75 static void assert_thread_dispatch_disabled_context(void) 76 { 77 assert(!_Thread_Dispatch_is_enabled()); 78 assert(!_RTEMS_Allocator_is_owner()); 79 assert(!life_protected()); 80 } 35 81 36 82 static void assert_static_order(int index) … … 55 101 { 56 102 assert_static_order(0); 103 assert_allocator_protected_thread_context(); 57 104 return true; 58 105 } … … 61 108 { 62 109 assert_static_order(0); 110 assert_thread_dispatch_disabled_context(); 63 111 } 64 112 … … 66 114 { 67 115 assert_static_order(0); 116 assert_life_protected_thread_context(); 68 117 } 69 118 … … 71 120 { 72 121 assert_static_order(0); 122 assert_allocator_protected_thread_context(); 73 123 } 74 124 … … 81 131 { 82 132 assert_static_order(0); 133 assert_normal_thread_context(); 83 134 } 84 135 … … 86 137 { 87 138 assert_static_order(0); 139 assert_normal_thread_context(); 88 140 } 89 141 … … 102 154 { 103 155 assert_static_order(0); 156 assert_life_protected_thread_context(); 104 157 } 105 158 … … 107 160 { 108 161 assert_static_order(1); 162 assert_allocator_protected_thread_context(); 109 163 return true; 110 164 } … … 113 167 { 114 168 assert_static_order(1); 169 assert_thread_dispatch_disabled_context(); 115 170 } 116 171 … … 118 173 { 119 174 assert_static_order(1); 175 assert_life_protected_thread_context(); 120 176 } 121 177 … … 123 179 { 124 180 assert_static_order(1); 181 assert_allocator_protected_thread_context(); 125 182 } 126 183 … … 133 190 { 134 191 assert_static_order(1); 192 assert_normal_thread_context(); 135 193 } 136 194 … … 138 196 { 139 197 assert_static_order(1); 198 assert_normal_thread_context(); 140 199 } 141 200 … … 154 213 { 155 214 assert_static_order(1); 215 assert_life_protected_thread_context(); 156 216 } 157 217 … … 159 219 { 160 220 assert_forward_order(2); 221 assert_allocator_protected_thread_context(); 161 222 return true; 162 223 } … … 165 226 { 166 227 assert_forward_order(2); 228 assert_thread_dispatch_disabled_context(); 167 229 } 168 230 … … 170 232 { 171 233 assert_static_order(2); 234 assert_life_protected_thread_context(); 172 235 } 173 236 … … 175 238 { 176 239 assert_reverse_order(2); 240 assert_allocator_protected_thread_context(); 177 241 } 178 242 … … 185 249 { 186 250 assert_forward_order(2); 251 assert_normal_thread_context(); 187 252 } 188 253 … … 190 255 { 191 256 assert_forward_order(2); 257 assert_normal_thread_context(); 192 258 } 193 259 … … 208 274 { 209 275 assert_forward_order(2); 276 assert_life_protected_thread_context(); 210 277 } 211 278 … … 213 280 { 214 281 assert_forward_order(3); 282 assert_allocator_protected_thread_context(); 215 283 return true; 216 284 } … … 219 287 { 220 288 assert_forward_order(3); 289 assert_thread_dispatch_disabled_context(); 221 290 } 222 291 … … 224 293 { 225 294 assert_static_order(3); 295 assert_life_protected_thread_context(); 226 296 } 227 297 … … 229 299 { 230 300 assert_reverse_order(3); 301 assert_allocator_protected_thread_context(); 231 302 } 232 303 … … 239 310 { 240 311 assert_forward_order(3); 312 assert_normal_thread_context(); 241 313 } 242 314 … … 244 316 { 245 317 assert_forward_order(3); 318 assert_normal_thread_context(); 246 319 } 247 320 … … 260 333 { 261 334 assert_forward_order(3); 335 assert_life_protected_thread_context(); 262 336 } 263 337
Note: See TracChangeset
for help on using the changeset viewer.