summaryrefslogtreecommitdiffstats
path: root/testsuites/sptests/spfatal03/init.c
diff options
context:
space:
mode:
Diffstat (limited to 'testsuites/sptests/spfatal03/init.c')
-rw-r--r--testsuites/sptests/spfatal03/init.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/testsuites/sptests/spfatal03/init.c b/testsuites/sptests/spfatal03/init.c
new file mode 100644
index 0000000000..10a9f277e8
--- /dev/null
+++ b/testsuites/sptests/spfatal03/init.c
@@ -0,0 +1,54 @@
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "../spfatal_support/spfatal.h"
+
+/*
+ * Semaphore Obtain in Critical Section
+ *
+ * COPYRIGHT (c) 1989-2011.
+ * On-Line Applications Research Corporation (OAR).
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#include <rtems/bspIo.h>
+
+#define CONFIGURE_MAXIMUM_SEMAPHORES 10
+
+#define FATAL_ERROR_TEST_NAME "3"
+#define FATAL_ERROR_DESCRIPTION "Core Mutex obtain in critical section"
+#define FATAL_ERROR_EXPECTED_SOURCE INTERNAL_ERROR_CORE
+#define FATAL_ERROR_EXPECTED_ERROR \
+ INTERNAL_ERROR_BAD_THREAD_DISPATCH_DISABLE_LEVEL
+
+static void force_error(void)
+{
+
+ rtems_status_code status;
+ rtems_id mutex;
+
+ status = rtems_semaphore_create(
+ rtems_build_name( 'S','0',' ',' '),
+ 0,
+ RTEMS_LOCAL|
+ RTEMS_SIMPLE_BINARY_SEMAPHORE,
+ 0,
+ &mutex
+ );
+ directive_failed( status, "rtems_semaphore_create of S0");
+ printk("Create semaphore S0\n");
+
+ printk("Obtain semaphore in dispatching critical section\n");
+ _Thread_Dispatch_disable();
+ status = rtems_semaphore_obtain( mutex, RTEMS_WAIT, RTEMS_NO_TIMEOUT );
+ /* !!! SHOULD NOT RETURN FROM THE ABOVE CALL */
+
+ rtems_test_assert( 0 );
+ /* we will not run this far */
+}
+
+#include "../spfatal_support/spfatalimpl.h"