29 #define __RTEMS_VIOLATE_KERNEL_VISIBILITY__ 1 50 cantProceed(
"epicsSpinMustCreate: epicsSpinCreate failed.");
59 rtems_interrupt_level
level;
61 rtems_interrupt_disable(level);
62 _Thread_Disable_dispatch();
64 rtems_interrupt_enable(level);
65 _Thread_Enable_dispatch();
66 if (!rtems_interrupt_is_in_progress()) {
67 printk(
"epicsSpinLock(%p): Deadlock.\n", spin);
68 cantProceed(
"Recursive lock, missed unlock or block when locked.");
71 printk(
"epicsSpinLock(%p): Deadlock in ISR.\n" 72 "Recursive lock, missed unlock or block when locked.\n",
82 rtems_interrupt_level
level;
84 rtems_interrupt_disable(level);
85 _Thread_Disable_dispatch();
87 rtems_interrupt_enable(level);
88 _Thread_Enable_dispatch();
100 printk(
"epicsSpinUnlock(%p): not locked\n", spin);
104 rtems_interrupt_enable (level);
105 _Thread_Enable_dispatch();
void epicsSpinLock(epicsSpinId spin)
int epicsSpinTryLock(epicsSpinId spin)
void epicsSpinDestroy(epicsSpinId spin)
void epicsSpinUnlock(epicsSpinId spin)
rtems_interrupt_level level
LIBCOM_API void cantProceed(const char *msg,...)
Routines for code that can't continue or return after an error.
epicsSpinId epicsSpinMustCreate(void)
epicsSpinId epicsSpinCreate(void)
struct epicsSpin epicsSpin