|
From: <jmk...@us...> - 2003-08-24 09:38:27
|
Update of /cvsroot/emc/rtapi/examples/semaphore
In directory sc8-pr-cvs1:/tmp/cvs-serv3121/examples/semaphore
Modified Files:
master.c slave.c
Log Message:
Added module ID, now rtapi_exit() should remove all items allocated by the module. Added a mutex to protect RTAPI internal data from simultaneous access. Basic testing complete, needs more detailed testing.
Index: master.c
===================================================================
RCS file: /cvsroot/emc/rtapi/examples/semaphore/master.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** master.c 20 Aug 2003 03:16:20 -0000 1.11
--- master.c 24 Aug 2003 09:38:24 -0000 1.12
***************
*** 11,14 ****
--- 11,15 ----
#include "common.h" /* semaphore key */
+ static int module;
static int master_sem; /* the semaphore ID */
static int master_task; /* the task ID */
***************
*** 38,49 ****
long period;
! if (rtapi_init() != RTAPI_SUCCESS ) {
return -1;
}
/* create the semaphore */
! master_sem = rtapi_sem_new( SEM_KEY );
if ( master_sem < 0 ) {
rtapi_print( "sem master init: rtapi_sem_new returned %d\n", master_sem );
return -1;
}
--- 39,53 ----
long period;
! module = rtapi_init("SEM_MASTER");
! if ( module < 0 ) {
! rtapi_print( "sem master init: rtapi_init returned %d\n", module );
return -1;
}
/* create the semaphore */
! master_sem = rtapi_sem_new( SEM_KEY, module );
if ( master_sem < 0 ) {
rtapi_print( "sem master init: rtapi_sem_new returned %d\n", master_sem );
+ rtapi_exit(module);
return -1;
}
***************
*** 58,61 ****
--- 62,66 ----
rtapi_print("sem master init: rtapi_clock_set_period failed with %ld\n",
period);
+ rtapi_exit(module);
return -1;
}
***************
*** 65,68 ****
--- 70,74 ----
/* timer period too long */
rtapi_print("sem master init: clock period too long: %ld\n", period );
+ rtapi_exit(module);
return -1;
}
***************
*** 75,82 ****
/* create the master task */
! master_task = rtapi_task_new(master_code, 0 /* arg */, master_prio,
MASTER_STACKSIZE, RTAPI_NO_FP );
if ( master_task < 0 ) {
rtapi_print( "sem master init: rtapi_task_new returned %d\n", master_task );
return -1;
}
--- 81,89 ----
/* create the master task */
! master_task = rtapi_task_new(master_code, 0 /* arg */, master_prio, module,
MASTER_STACKSIZE, RTAPI_NO_FP );
if ( master_task < 0 ) {
rtapi_print( "sem master init: rtapi_task_new returned %d\n", master_task );
+ rtapi_exit(module);
return -1;
}
***************
*** 86,89 ****
--- 93,97 ----
if ( retval != RTAPI_SUCCESS ) {
rtapi_print("sem master init: rtapi_task_start returned %d\n", retval );
+ rtapi_exit(module);
return -1;
}
***************
*** 99,122 ****
int retval;
- /* TESTING - intentionally fail to remove the task and the semaphore */
retval = rtapi_task_pause( master_task );
if ( retval != RTAPI_SUCCESS ) {
rtapi_print("sem master exit: rtapi_task_stop returned %d\n", retval );
- return;
}
retval = rtapi_task_delete( master_task );
if ( retval != RTAPI_SUCCESS ) {
rtapi_print("sem master exit: rtapi_task_delete returned %d\n", retval );
- return;
}
! retval = rtapi_sem_delete( master_sem );
if ( retval != RTAPI_SUCCESS ) {
rtapi_print("sem master exit: rtapi_sem_delete returned %d\n", retval );
- return;
}
rtapi_print("sem master exit: master count is %d\n", master_count);
! rtapi_exit();
}
--- 107,126 ----
int retval;
retval = rtapi_task_pause( master_task );
if ( retval != RTAPI_SUCCESS ) {
rtapi_print("sem master exit: rtapi_task_stop returned %d\n", retval );
}
retval = rtapi_task_delete( master_task );
if ( retval != RTAPI_SUCCESS ) {
rtapi_print("sem master exit: rtapi_task_delete returned %d\n", retval );
}
! retval = rtapi_sem_delete( master_sem, module );
if ( retval != RTAPI_SUCCESS ) {
rtapi_print("sem master exit: rtapi_sem_delete returned %d\n", retval );
}
rtapi_print("sem master exit: master count is %d\n", master_count);
! rtapi_exit(module);
}
Index: slave.c
===================================================================
RCS file: /cvsroot/emc/rtapi/examples/semaphore/slave.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** slave.c 14 Aug 2003 04:08:26 -0000 1.8
--- slave.c 24 Aug 2003 09:38:24 -0000 1.9
***************
*** 11,14 ****
--- 11,15 ----
#include "common.h" /* semaphore key */
+ static int module;
static int slave_sem; /* the semaphore ID */
static int slave_task; /* the task ID */
***************
*** 34,45 ****
int slave_prio;
! if (rtapi_init() != RTAPI_SUCCESS ) {
return -1;
}
/* open the semaphore */
! slave_sem = rtapi_sem_new( SEM_KEY );
if ( slave_sem < 0 ) {
rtapi_print( "sem slave init: rtapi_sem_new returned %d\n", slave_sem );
return -1;
}
--- 35,49 ----
int slave_prio;
! module = rtapi_init("SEM_SLAVE");
! if ( module < 0 ) {
! rtapi_print( "sem slave init: rtapi_init returned %d\n", module );
return -1;
}
/* open the semaphore */
! slave_sem = rtapi_sem_new( SEM_KEY, module );
if ( slave_sem < 0 ) {
rtapi_print( "sem slave init: rtapi_sem_new returned %d\n", slave_sem );
+ rtapi_exit(module);
return -1;
}
***************
*** 49,56 ****
/* create the slave task */
! slave_task = rtapi_task_new(slave_code, 0 /* arg */, slave_prio,
SLAVE_STACKSIZE, RTAPI_NO_FP );
if ( slave_task < 0 ) {
rtapi_print( "sem slave init: rtapi_task_new returned %d\n", slave_task );
return -1;
}
--- 53,61 ----
/* create the slave task */
! slave_task = rtapi_task_new(slave_code, 0 /* arg */, slave_prio, module,
SLAVE_STACKSIZE, RTAPI_NO_FP );
if ( slave_task < 0 ) {
rtapi_print( "sem slave init: rtapi_task_new returned %d\n", slave_task );
+ rtapi_exit(module);
return -1;
}
***************
*** 60,63 ****
--- 65,69 ----
if ( retval != RTAPI_SUCCESS ) {
rtapi_print("sem slave init: rtapi_task_start returned %d\n", retval );
+ rtapi_exit(module);
return -1;
}
***************
*** 76,94 ****
if ( retval != RTAPI_SUCCESS ) {
rtapi_print("sem slave exit: rtapi_task_stop returned %d\n", retval );
- return;
}
retval = rtapi_task_delete( slave_task );
if ( retval != RTAPI_SUCCESS ) {
rtapi_print("sem slave exit: rtapi_task_delete returned %d\n", retval );
- return;
}
! retval = rtapi_sem_delete( slave_sem );
if ( retval != RTAPI_SUCCESS ) {
rtapi_print("sem slave exit: rtapi_sem_delete returned %d\n", retval );
- return;
}
rtapi_print("sem slave exit: slave count is %d\n", slave_count);
! rtapi_exit();
}
--- 82,97 ----
if ( retval != RTAPI_SUCCESS ) {
rtapi_print("sem slave exit: rtapi_task_stop returned %d\n", retval );
}
retval = rtapi_task_delete( slave_task );
if ( retval != RTAPI_SUCCESS ) {
rtapi_print("sem slave exit: rtapi_task_delete returned %d\n", retval );
}
! retval = rtapi_sem_delete( slave_sem, module );
if ( retval != RTAPI_SUCCESS ) {
rtapi_print("sem slave exit: rtapi_sem_delete returned %d\n", retval );
}
rtapi_print("sem slave exit: slave count is %d\n", slave_count);
! rtapi_exit(module);
}
|