--- a/testcases/open_posix_testsuite/conformance/interfaces/sched_setparam/9-1.c	2010-12-14 09:47:45.000000000 +0900
+++ b/testcases/open_posix_testsuite/conformance/interfaces/sched_setparam/9-1.c	2010-12-14 15:07:56.000000000 +0900
@@ -144,6 +144,7 @@
 	shmptr = (int *)shmat(shm_id, 0, 0);
 	if (shmptr < (int*)0) {
 		perror("An error occurs when calling shmat()");
+		shmctl(shm_id, IPC_RMID, NULL);
 		return PTS_UNRESOLVED;
 	}
 	*shmptr = 0;
@@ -155,6 +156,8 @@
 		} else {
 			perror("An error occurs when calling sched_setscheduler()");
 		}
+		shmdt(shmptr);
+		shmctl(shm_id, IPC_RMID, NULL);
 		return PTS_UNRESOLVED;
 	}
 
@@ -165,12 +168,16 @@
 			for(j=0; j<i; j++) {
 				kill(child_pid[j], SIGTERM);		
 			}
+			shmdt(shmptr);
+			shmctl(shm_id, IPC_RMID, NULL);
 			return PTS_UNRESOLVED;
 		} else if (child_pid[i] == 0){
 			
 			child_process();
 
 			printf("This code should not be executed.\n");
+			shmdt(shmptr);
+			shmctl(shm_id, IPC_RMID, NULL);
 			return PTS_UNRESOLVED;
 		}
 	}		
@@ -181,12 +188,16 @@
 		for(j=0; j<i; j++) {
 			kill(child_pid[j], SIGTERM);		
 		}
+		shmdt(shmptr);
+		shmctl(shm_id, IPC_RMID, NULL);
 		return PTS_UNRESOLVED;
 	} else if (child_pid[i] == 0){
 		
 		test_process();
 		
 		printf("This code should not be executed.\n");
+		shmdt(shmptr);
+		shmctl(shm_id, IPC_RMID, NULL);
 		return PTS_UNRESOLVED;
 	}
 
@@ -199,6 +210,8 @@
 	if (sched_setparam(child_pid[i], &param) != 0) {
 		perror("An error occurs when calling sched_setparam()");
 		kill_children(child_pid);
+		shmdt(shmptr);
+		shmctl(shm_id, IPC_RMID, NULL);
 		return PTS_UNRESOLVED;
 	}
 	newcount = *shmptr;
@@ -206,10 +219,14 @@
 	if (newcount == oldcount){
 		printf("The target process does not preempt the calling process\n");
 		kill_children(child_pid);
+		shmdt(shmptr);
+		shmctl(shm_id, IPC_RMID, NULL);
 		return PTS_FAIL;
 	} 
 		
 	printf("Test PASSED\n");
 	kill_children(child_pid);
+	shmdt(shmptr);
+	shmctl(shm_id, IPC_RMID, NULL);
 	return PTS_PASS;
 }
