RM Blocking functionality when no callback provided is working
[keystone-rtos/rm-lld.git] / test / rm_test.c
index 173a5f2cf6e41d471ed385c8746598f37efa44b6..1e12b99028e5358825727c23b042b32a8fe472d9 100644 (file)
@@ -407,6 +407,13 @@ void rmCleanupTsk(UArg arg0, UArg arg1)
     int32_t result;
     
     /* Delete the RM test tasks */
+    System_printf("Core %d: Deleting RM startup task...\n", coreNum);
+    if (rmStartupTskHandle) {
+       Task_delete(&rmStartupTskHandle);
+       /* Set the task handle to be NULL so that the delete only occurs once */
+       rmStartupTskHandle = NULL;
+    }  
+    
     if (coreNum == 0) {
         if (rmServerTskHandle) {
             System_printf("Core %d: Deleting RM server task...\n", coreNum);
@@ -486,14 +493,6 @@ void rmServerTsk(UArg arg0, UArg arg1)
     Rm_ServiceReqInfo  requestInfo;
     Rm_ServiceRespInfo responseInfo;
     Task_Params        taskParams;
-       
-    /* Delete the RM startup task */
-    System_printf("Core %d: Deleting RM startup task...\n", coreNum);
-    if (rmStartupTskHandle) {
-        Task_delete(&rmStartupTskHandle);
-        /* Set the task handle to be NULL so that the delete only occurs once */
-        rmStartupTskHandle = NULL;
-    }
 
     Rm_printInstanceStatus(rmServerHandle);
 
@@ -762,14 +761,6 @@ void rmClientTsk(UArg arg0, UArg arg1)
     Rm_ServiceRespInfo responseInfo;    
     Task_Params        taskParams;
     uint32_t           i, j;
-       
-    /* Delete the RM startup task */
-    System_printf("Core %d: Deleting RM startup task...\n", coreNum);
-    if (rmStartupTskHandle) {
-       Task_delete(&rmStartupTskHandle);
-       /* Set the task handle to be NULL so that the delete only occurs once */
-       rmStartupTskHandle = NULL;
-    }
 
     Rm_printInstanceStatus(rmCdHandle);
     Rm_printInstanceStatus(rmClientHandle);
@@ -970,7 +961,7 @@ void rmClientTsk(UArg arg0, UArg arg1)
     /* Allocate a resource without providing a callback function.  RM should block and not return until the result
      * is returned by the server. */
     setRmRequest(&requestInfo, Rm_service_RESOURCE_ALLOCATE_INIT, resourceNameGpQ, 
-                 7000, 1, 0, NULL, TRUE, &responseInfo);     
+                 7000, 1, 0, NULL, FALSE, &responseInfo);     
     rmClientServiceHandle->Rm_serviceHandler(rmClientServiceHandle->rmHandle, &requestInfo, &responseInfo);   
     System_printf("Core %d : %s init allocation (without callback specified) of %s %d - %d : ", coreNum,
                                                                                                 rmClientName,
@@ -1048,6 +1039,12 @@ void rmStartupTsk(UArg arg0, UArg arg1)
         rmTransportMap[i].transportHandle = NULL;
     }
 
+    /* Create the gate internal to RM for service requests not specifying a callback function
+     * and needing a blocking operation to complete.
+     *
+     * Must be created from a different task than the test tasks to allow proper blocking. */
+    Osal_rmLocalGateInit();  
+
     if (coreNum == 0) {
         GateMP_Params_init(&gateParams);
         gateParams.name = RM_TASK_GATE_NAME;
@@ -1267,10 +1264,6 @@ void rmStartupTsk(UArg arg0, UArg arg1)
         System_printf("Core %d: Registered RM Client <=> RM CD transport with RM Client instance\n", coreNum);
     }
 
-    /* Create the gate internal to RM for service requests not specifying a callback function
-     * and needing a blocking operation to complete */
-    Osal_rmLocalGateInit();
-
     /* Create the RM receive task.  Assign higher priority than the test tasks so that
      * when they spin waiting for messages from other RM instances the receive task is
      * executed. */