Michael Davidsaver 1ba48868f6 PVA server avoid lock order violation
There is a lock order violation when a server force disconnects it's clients while sending a final message to it (or concurrent close, or probably others). The entry points are channelStateChange() and operation send().

Fix is not to hold the channel mutex when destroy()ing operations.

epics::pvAccess::ServerChannelRPCRequesterImpl::destroy
  locks RPC requester mutex
epics::pvAccess::ServerChannel::destroy
  locks channel mutex
epics::pvAccess::ServerChannelRequesterImpl::channelStateChange


epics::pvAccess::ServerChannel::unregisterRequest
  locks channel mutex
epics::pvAccess::ServerChannelRPCRequesterImpl::destroy
  locks RPC requester mutex
epics::pvAccess::ServerChannelRPCRequesterImpl::send
2018-06-25 19:52:10 -07:00
2018-05-28 10:19:48 -07:00
2018-04-24 13:50:59 -07:00
2018-03-19 15:36:21 -07:00
2018-05-18 15:20:26 -07:00
2011-09-22 14:36:56 +02:00
2018-06-25 19:52:10 -07:00
2018-05-18 15:20:26 -07:00
2012-06-15 14:47:16 +02:00
2017-11-30 12:02:10 -06:00
2015-08-11 17:49:18 -05:00
2016-07-19 10:16:27 +02:00
2017-07-17 14:43:50 +02:00
2017-07-14 18:59:02 +02:00
2015-10-15 21:53:20 +02:00
2014-06-04 10:22:04 +02:00
2015-09-02 10:23:39 +02:00

pvAccessCPP

pvAccess is a computer communications protocol for control systems, and is a central component of the EPICS software toolkit. pvAccessCPP is the name of the software module which contains the C++ implementation of pvAccess.

Further Info

Consult the documents in the documentation directory, in particular

  • pvAccessCPP.html
  • RELEASE_NOTES.md

Also see the EPICS Version 4 website

Prerequisites

The pvAccessCPP requires recent versions of the following software:

  1. EPICS Base (v3.14.12.3 or later)
  2. EPICS4 pvCommonCPP (4.1.1 or later)
  3. EPICS4 pvDataCPP (5.0.2 or later)

Building

Building uses the make utility and the EPICS base build system.

The build system needs the location of the prerequisites, e.g. by placing the lines of the form

PVCOMMON = /home/install/epicsV4/pvCommonCPP
PVDATA = /home/install/epicsV4/pvDataCPP
EPICS_BASE = /home/install/epics/base

pointing to the locations in a file called RELEASE.local in the configure directory or the parent directory of pvAccessCPP.

With this in place, to build type make

make

To perform a clean build type

make clean uninstall

To run the unit tests type

make runtests

For more information on the EPICS build system consult the Application Development guide.

Example Usage

This section describes how you can test and demo pvAccess.

A test server is shipped with pvAccessCPP. See the file pvAccessCPP/DEMO for examples of usage. To run the server, write a setup script like that above, and then use it prior to executing "runTestServer":

$ ./runTestServer 
Starting pvAccess C++ test server...
VERSION : pvAccess Server v4.1.1
PROVIDER_NAMES : local
BEACON_ADDR_LIST : 
AUTO_BEACON_ADDR_LIST : 1
BEACON_PERIOD : 15
BROADCAST_PORT : 5076
SERVER_PORT : 5075
RCV_BUFFER_SIZE : 16384
IGNORE_ADDR_LIST: 
STATE : INITIALIZED

Then, another window, you can go through the demos in pvAccessCPP/DEMO. For example:

$ ./bin/$EPICS_HOST_ARCH/pvget testValue
testValue                     0
Languages
C++ 63.4%
C 35.2%
Python 0.9%
Makefile 0.5%