Argonne National Laboratory

Experimental Physics and
Industrial Control System

2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  <2017 Index 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  <2017
<== Date ==> <== Thread ==>

Subject: Re: base-3.16.1 bug
From: Andrew Johnson <anj@aps.anl.gov>
To: EPICS core-talk <core-talk@aps.anl.gov>
Date: Thu, 31 Aug 2017 16:35:05 -0500
Hi Marty,

On 08/31/2017 01:38 PM, Marty Kraimer wrote:
> mrk> caput DBRdouble00 10
> Old : DBRdouble00                    2
> CA.Client.Exception...............................................
>     Warning: "Channel write request failed"
>     Context: "op=1, channel=DBRdouble00, type=DBR_STRING, count=1, ctx="DBRdouble00""
>     Source File: ../oldChannelNotify.cpp line 160
>     Current Time: Thu Aug 31 2017 13:50:16.296689621
> ..................................................................
> New : DBRdouble00                    10

I get the same result as you with a base-3.16 master build of
exampleCPP, and it even happens with the Base 3.16 softIoc loading a
single ao record, so this has nothing to do with V4:

tux% cat ~/db/analog.db
record(ao, "$(user):ao") {}
record(ai, "$(user):ai") {}
tux% bin/linux-x86_64/softIoc -m user=anj -d ~/db/analog.db
Starting iocInit
############################################################################
## EPICS R3.16.1-DEV
## EPICS Base built Aug 31 2017
############################################################################
iocRun: All initialization complete
epics> dbl
anj:ao
anj:ai

tux% caput anj:ao 10
Old : anj:ao                         0
CA.Client.Exception...............................................
    Warning: "Channel write request failed"
    Context: "op=1, channel=anj:ao, type=DBR_STRING, count=1,
ctx="anj:ao"New : anj:ao                         10
"
    Source File: ../oldChannelNotify.cpp line 160
    Current Time: Thu Aug 31 2017 15:23:51.055293326
..................................................................
tux%


The problem is related to the new Link Support code: The OUT links in
both ao records are unset so are CONSTANT links, and the ao Soft Device
support returns the status value it gets from calling dbPutLink() as the
result of its write_ao() method, but for the CONSTANT link type there is
no lset::putValue() method, so the return value from dbPutLink() is
S_db_noLSET, which now gets returned all the way back through the
rset::process() method up to the routine dbChannel_put() so RSRV sees an
error from the put which it passes back to the CA client.

The same problem will probably occur with bo, stringout and lso records
because the soft device support for those record types also pass the
return value from dbPutLink() back to the record type. Other device
supports always return 0 independent of what dbPutLink() returns so
won't generate the error.

Ralph, Michael:

Where do you think is the correct place to squash this error? Should I
add a dummy lset::putValue() method to the dbConstLink type (that just
returns OK), or change the soft device supports to discard the return
value from dbPutLink()?

- Andrew

-- 
Arguing for surveillance because you have nothing to hide is no
different than making the claim, "I don't care about freedom of
speech because I have nothing to say." -- Edward Snowdon

Replies:
Re: base-3.16.1 bug Ralph Lange

Navigate by Date:
Prev: RE: areaDetector developers meeting @ ITER Mark Rivers
Next: Re: base-3.16.1 bug Ralph Lange
Index: 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  <2017
Navigate by Thread:
Prev: Re: [epics-base/pvAccessCPP] fix issues 62,63,64 (#65) Andrew Johnson
Next: Re: base-3.16.1 bug Ralph Lange
Index: 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  <2017
ANJ, 06 Sep 2017 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·