Commit Graph
9 Commits
Author SHA1 Message Date
Andrew Johnsonandmdavidsaver ece8b94357 include epicsGuard.h for 3.15 builds 2021-01-05 11:01:02 -08:00
Andrew Johnsonandmdavidsaver bf04c69bda Conveyor: Don't try to support self-deletion 2021-01-05 11:01:02 -08:00
Andrew Johnsonandmdavidsaver e00ccbeb9c Conveyor: Change run() to follow MAD's skeleton
This is still broken if a client method (notify() or the destructor)
deletes the conveyor, which accesses data members before exiting.
2021-01-05 11:01:02 -08:00
Andrew Johnsonandmdavidsaver a078e03041 Notifyer: Give conveyor threads a unique name 2021-01-05 11:01:02 -08:00
Andrew Johnsonandmdavidsaver 98e81a542e Use epicsMutex and epicsEvent instead of pv::data equivalents 2021-01-05 11:01:02 -08:00
Andrew Johnsonandmdavidsaver 0332d0f2c1 notifierConveyer destruction protection
Remove the work variable
2021-01-05 11:01:02 -08:00
Andrew Johnsonandmdavidsaver 33cc9b1fdb Define epicsExportSharedSymbols in ca/notifierConveyor.cpp 2021-01-05 11:01:02 -08:00
Andrew Johnsonandmdavidsaver 8b3a057a69 Have notifierConveyor trap and drop any exceptions 2021-01-05 11:01:02 -08:00
Andrew Johnsonandmdavidsaver 06c2fb579f Replaced 4 notification threads with 2 notifierConveyors
Channel connection notifications are now handled by connectNotifier,
getDone, putDone and monitor events handled by resultNotifier.
A notifierConveyor is generic, and contains a queue and a thread.
You pass a Notification pointing to a NotifierClient to a Conveyor's
notifyClient() method, and the thread will call the client's
notifyClient() method once it reaches the front of the queue.

The conveyor threads stop when the caProvider is destroyed.
The queue stores weak pointers, so queued notifications won't prevent
client objects from being destroyed.
2021-01-05 11:01:02 -08:00