diff --git a/configure/RULES_BUILD b/configure/RULES_BUILD index a0f9537fe..37e54372f 100644 --- a/configure/RULES_BUILD +++ b/configure/RULES_BUILD @@ -81,6 +81,8 @@ else host: endif +-include $(CONFIG)/RULES_FILE_TYPE + -include $(CONFIG)/RULES.Db #--------------------------------------------------------------- @@ -122,8 +124,6 @@ LIBTARGETS += $(LIBNAME) $(INSTALL_LIBS) $(TESTLIBNAME) \ $(LOADABLE_SHRLIBNAME) $(INSTALL_LOADABLE_SHRLIBS) --include $(CONFIG)/RULES_FILE_TYPE - # Main targets install: buildInstall diff --git a/src/ioc/db/dbEvent.c b/src/ioc/db/dbEvent.c index ce8f553b0..b3fce746a 100644 --- a/src/ioc/db/dbEvent.c +++ b/src/ioc/db/dbEvent.c @@ -979,6 +979,7 @@ static void event_task (void *pParm) { struct event_user * const evUser = (struct event_user *) pParm; struct event_que * ev_que; + unsigned char pendexit; /* init hook */ if (evUser->init_func) { @@ -1020,9 +1021,10 @@ static void event_task (void *pParm) event_read (ev_que); epicsMutexMustLock ( evUser->lock ); } + pendexit = evUser->pendexit; epicsMutexUnlock ( evUser->lock ); - } while ( ! evUser->pendexit ); + } while( ! pendexit ); epicsMutexDestroy(evUser->firstque.writelock); diff --git a/src/libCom/misc/epicsUnitTest.c b/src/libCom/misc/epicsUnitTest.c index 140ad6cb0..773b7b004 100644 --- a/src/libCom/misc/epicsUnitTest.c +++ b/src/libCom/misc/epicsUnitTest.c @@ -211,7 +211,7 @@ int testDone(void) { /* Our test harness, for RTEMS and vxWorks */ -static void harnessExit(void *dummy) { +void testHarnessExit(void *dummy) { epicsTimeStamp ended; int Faulty; @@ -248,7 +248,7 @@ static void harnessExit(void *dummy) { void testHarness(void) { epicsThreadOnce(&onceFlag, testOnce, NULL); - epicsAtExit(harnessExit, NULL); + epicsAtExit(testHarnessExit, NULL); Harness = 1; Programs = 0; Tests = 0; diff --git a/src/libCom/misc/epicsUnitTest.h b/src/libCom/misc/epicsUnitTest.h index 0489752a1..8a3bd6e17 100644 --- a/src/libCom/misc/epicsUnitTest.h +++ b/src/libCom/misc/epicsUnitTest.h @@ -43,9 +43,11 @@ epicsShareFunc int testDone(void); typedef int (*TESTFUNC)(void); epicsShareFunc void testHarness(void); +epicsShareFunc void testHarnessExit(void *dummy); epicsShareFunc void runTestFunc(const char *name, TESTFUNC func); #define runTest(func) runTestFunc(#func, func) +#define testHarnessDone() testHarnessExit(0) #ifdef __cplusplus } diff --git a/src/libCom/osi/os/default/epicsReadline.c b/src/libCom/osi/os/default/epicsReadline.c index 1d7d9c1d5..7cdcfdafe 100644 --- a/src/libCom/osi/os/default/epicsReadline.c +++ b/src/libCom/osi/os/default/epicsReadline.c @@ -79,6 +79,7 @@ epicsReadlineEnd(void *context) #include #include +#include struct readlineContext { FILE *in; @@ -138,6 +139,14 @@ epicsReadline (const char *prompt, void *context) free (readlineContext->line); readlineContext->line = NULL; if (readlineContext->in == NULL) { + if (!isatty(fileno(stdout))) { + /* The libedit readline emulator on Darwin doesn't + * print the prompt when the terminal isn't a tty. + */ + fputs (prompt, stdout); + fflush (stdout); + rl_already_prompted = 1; + } rlState = rlBusy; line = readline (prompt); rlState = rlIdle; diff --git a/src/libCom/test/epicsRunLibComTests.c b/src/libCom/test/epicsRunLibComTests.c index fe308b061..0f10dbfc6 100644 --- a/src/libCom/test/epicsRunLibComTests.c +++ b/src/libCom/test/epicsRunLibComTests.c @@ -101,7 +101,12 @@ void epicsRunLibComTests(void) runTest(taskwdTest); /* - * Exit must come last as it never returns + * Report now in case epicsExitTest dies + */ + testHarnessDone(); + + /* + * epicsExitTest must come last as it never returns */ runTest(epicsExitTest); }