Index: testsuites/sptests/ChangeLog
===================================================================
--- testsuites/sptests/ChangeLog	(revision c7cf1d77ca5b36d0b0aec2d0fb896763b0049614)
+++ testsuites/sptests/ChangeLog	(revision 5353469af4870c6e624986f65ebef7be0863c056)
@@ -1,2 +1,12 @@
+2009-07-28	Joel Sherrill <joel.sherrill@OARcorp.com>
+
+	* Makefile.am, configure.ac: Add test case for processing a timeout
+	on a thread (that is the thread executing) that has also had its
+	request satisfied while it is being enqueued.
+	* spintrcritical16/.cvsignore, spintrcritical16/Makefile.am,
+	spintrcritical16/init.c, spintrcritical16/spintrcritical16.doc,
+	spintrcritical16/spintrcritical16.scn: New files.
+	* spintrcritical15/init.c: Remove unused TSR>
+
 2009-07-27	Joel Sherrill <joel.sherrill@OARcorp.com>
 
Index: testsuites/sptests/Makefile.am
===================================================================
--- testsuites/sptests/Makefile.am	(revision c7cf1d77ca5b36d0b0aec2d0fb896763b0049614)
+++ testsuites/sptests/Makefile.am	(revision 5353469af4870c6e624986f65ebef7be0863c056)
@@ -22,5 +22,5 @@
     spintrcritical05 spintrcritical06 spintrcritical07 spintrcritical08 \
     spintrcritical09 spintrcritical10 spintrcritical11 spintrcritical12 \
-    spintrcritical13 spintrcritical14 spintrcritical15
+    spintrcritical13 spintrcritical14 spintrcritical15 spintrcritical16
  
 DIST_SUBDIRS = $(SUBDIRS) spfatal_support spintrcritical_support
Index: testsuites/sptests/configure.ac
===================================================================
--- testsuites/sptests/configure.ac	(revision c7cf1d77ca5b36d0b0aec2d0fb896763b0049614)
+++ testsuites/sptests/configure.ac	(revision 5353469af4870c6e624986f65ebef7be0863c056)
@@ -116,4 +116,5 @@
 spintrcritical14/Makefile
 spintrcritical15/Makefile
+spintrcritical16/Makefile
 spobjgetnext/Makefile
 spprintk/Makefile
Index: testsuites/sptests/spintrcritical15/init.c
===================================================================
--- testsuites/sptests/spintrcritical15/init.c	(revision c7cf1d77ca5b36d0b0aec2d0fb896763b0049614)
+++ testsuites/sptests/spintrcritical15/init.c	(revision 5353469af4870c6e624986f65ebef7be0863c056)
@@ -20,11 +20,4 @@
 rtems_id Secondary_task_id;
 rtems_id Semaphore;
-
-rtems_timer_service_routine test_release_from_isr(
-  rtems_id  timer,
-  void     *arg
-)
-{
-}
 
 rtems_task Secondary_task(
@@ -104,5 +97,4 @@
 
 #define CONFIGURE_MAXIMUM_TASKS          2
-#define CONFIGURE_MAXIMUM_TIMERS         1
 #define CONFIGURE_MICROSECONDS_PER_TICK  1000
 #define CONFIGURE_INIT_TASK_PRIORITY  INIT_PRIORITY
Index: testsuites/sptests/spintrcritical16/.cvsignore
===================================================================
--- testsuites/sptests/spintrcritical16/.cvsignore	(revision 5353469af4870c6e624986f65ebef7be0863c056)
+++ testsuites/sptests/spintrcritical16/.cvsignore	(revision 5353469af4870c6e624986f65ebef7be0863c056)
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in
Index: testsuites/sptests/spintrcritical16/Makefile.am
===================================================================
--- testsuites/sptests/spintrcritical16/Makefile.am	(revision 5353469af4870c6e624986f65ebef7be0863c056)
+++ testsuites/sptests/spintrcritical16/Makefile.am	(revision 5353469af4870c6e624986f65ebef7be0863c056)
@@ -0,0 +1,30 @@
+##
+## $Id$
+##
+
+MANAGERS = all
+
+rtems_tests_PROGRAMS = spintrcritical16
+spintrcritical16_SOURCES = init.c \
+    ../spintrcritical_support/intrcritical.c
+
+dist_rtems_tests_DATA = spintrcritical16.scn
+dist_rtems_tests_DATA += spintrcritical16.doc
+
+include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
+include $(top_srcdir)/../automake/compile.am
+include $(top_srcdir)/../automake/leaf.am
+
+spintrcritical16_LDADD = $(MANAGERS_NOT_WANTED:%=$(PROJECT_LIB)/no-%.rel)
+
+AM_CPPFLAGS += -I$(top_srcdir)/../support/include
+AM_CPPFLAGS += -I$(top_srcdir)/spintrcritical_support
+
+LINK_OBJS = $(spintrcritical16_OBJECTS) $(spintrcritical16_LDADD)
+LINK_LIBS = $(spintrcritical16_LDLIBS)
+
+spintrcritical16$(EXEEXT): $(spintrcritical16_OBJECTS) $(spintrcritical16_DEPENDENCIES)
+	@rm -f spintrcritical16$(EXEEXT)
+	$(make-exe)
+
+include $(top_srcdir)/../automake/local.am
Index: testsuites/sptests/spintrcritical16/init.c
===================================================================
--- testsuites/sptests/spintrcritical16/init.c	(revision 5353469af4870c6e624986f65ebef7be0863c056)
+++ testsuites/sptests/spintrcritical16/init.c	(revision 5353469af4870c6e624986f65ebef7be0863c056)
@@ -0,0 +1,114 @@
+/*
+ *  COPYRIGHT (c) 1989-2009.
+ *  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.com/license/LICENSE.
+ *
+ *  $Id$
+ */
+
+#define __RTEMS_VIOLATE_KERNEL_VISIBILITY__
+#include <tmacros.h>
+#include <intrcritical.h>
+
+#define TEST_NAME          "16"
+
+Thread_Control *Main_TCB;
+rtems_id        Main_task;
+rtems_id        Semaphore;
+volatile bool   case_hit;
+
+Thread_blocking_operation_States getState(void)
+{
+  Objects_Locations  location;
+  Semaphore_Control *sem;
+
+  sem = (Semaphore_Control *)_Objects_Get(
+    &_Semaphore_Information, Semaphore, &location ); 
+  if ( location != OBJECTS_LOCAL ) {
+    puts( "Bad object lookup" );
+    rtems_test_exit(0);
+  }
+  _Thread_Unnest_dispatch();
+
+  return sem->Core_control.semaphore.Wait_queue.sync_state;
+}
+
+rtems_timer_service_routine test_release_from_isr(
+  rtems_id  timer,
+  void     *arg
+)
+{
+  if ( getState() == THREAD_BLOCKING_OPERATION_NOTHING_HAPPENED ) {
+    case_hit = true;
+    (void) rtems_semaphore_release( Semaphore );
+    _Thread_queue_Process_timeout( Main_TCB );
+  }
+}
+
+rtems_task Init(
+  rtems_task_argument ignored
+)
+{
+  rtems_status_code     sc;
+  int                   resets;
+
+  puts(
+    "\n\n*** TEST INTERRUPT CRITICAL SECTION " TEST_NAME " ***\n"
+    "Init - Trying to generate timeout of a thread that had its blocking\n"
+    "Init -   request satisfied while blocking but before time timeout"
+  );
+
+  puts( "Init - rtems_semaphore_create - OK" );
+  sc = rtems_semaphore_create(
+    rtems_build_name( 'S', 'M', '1', ' ' ),
+    0,
+    RTEMS_DEFAULT_ATTRIBUTES,
+    RTEMS_NO_PRIORITY,
+    &Semaphore
+  );
+  directive_failed( sc, "rtems_semaphore_create of SM1" );
+
+  Main_task = rtems_task_self();
+  Main_TCB  = _Thread_Executing;
+
+  interrupt_critical_section_test_support_initialize( test_release_from_isr );
+
+  case_hit = false;
+
+  for (resets=0 ; !case_hit && resets<10 ;) {
+    if ( interrupt_critical_section_test_support_delay() )
+      resets++;
+
+    sc = rtems_semaphore_obtain( Semaphore, RTEMS_DEFAULT_OPTIONS, 2 );
+    if ( sc == RTEMS_SUCCESSFUL )
+      break;
+    fatal_directive_status( sc, RTEMS_TIMEOUT, "rtems_semaphore_obtain" );
+  }
+
+  if ( case_hit ) {
+    puts( "Init - Case hit" );
+    puts( "*** END OF TEST INTERRUPT CRITICAL SECTION " TEST_NAME " ***" );
+  } else 
+    puts( "Init - Case not hit - ran too long" );
+
+
+  rtems_test_exit(0);
+}
+
+/* configuration information */
+
+#define CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER
+#define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER
+
+#define CONFIGURE_MAXIMUM_TASKS          1
+#define CONFIGURE_MAXIMUM_TIMERS         1
+#define CONFIGURE_MICROSECONDS_PER_TICK  1000
+#define CONFIGURE_RTEMS_INIT_TASKS_TABLE
+
+#define CONFIGURE_INIT
+#include <rtems/confdefs.h>
+
+/* global variables */
Index: testsuites/sptests/spintrcritical16/spintrcritical16.scn
===================================================================
--- testsuites/sptests/spintrcritical16/spintrcritical16.scn	(revision 5353469af4870c6e624986f65ebef7be0863c056)
+++ testsuites/sptests/spintrcritical16/spintrcritical16.scn	(revision 5353469af4870c6e624986f65ebef7be0863c056)
@@ -0,0 +1,7 @@
+*** TEST INTERRUPT CRITICAL SECTION 16 ***
+Init - Trying to generate timeout of a thread that had its blocking
+Init -   request satisfied while blocking but before time timeout
+Init - rtems_semaphore_create - OK
+Support - rtems_timer_create - creating timer 1
+Init - Case hit
+*** END OF TEST INTERRUPT CRITICAL SECTION 16 ***
