summaryrefslogtreecommitdiffstats
path: root/cpukit/sapi/src/iounregisterdriver.c
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/sapi/src/iounregisterdriver.c')
-rw-r--r--cpukit/sapi/src/iounregisterdriver.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/cpukit/sapi/src/iounregisterdriver.c b/cpukit/sapi/src/iounregisterdriver.c
index 5761138b09..631ffbfd82 100644
--- a/cpukit/sapi/src/iounregisterdriver.c
+++ b/cpukit/sapi/src/iounregisterdriver.c
@@ -17,6 +17,8 @@
#include <rtems/system.h>
#include <rtems/io.h>
+#include <rtems/rtems/intr.h>
+#include <rtems/score/thread.h>
#include <string.h>
/*
@@ -36,13 +38,20 @@ rtems_status_code rtems_io_unregister_driver(
rtems_device_major_number major
)
{
+ if ( rtems_interrupt_is_in_progress() )
+ return RTEMS_CALLED_FROM_ISR;
+
if ( major < _IO_Number_of_drivers ) {
+ _Thread_Disable_dispatch();
memset(
&_IO_Driver_address_table[major],
0,
sizeof( rtems_driver_address_table )
);
+ _Thread_Enable_dispatch();
+
return RTEMS_SUCCESSFUL;
}
+
return RTEMS_UNSATISFIED;
}