I forgot to CC tech-talk.
From: Mark Rivers
Sent: Monday, May 27, 2019 4:43 PM
To: 'Pilar' <[email protected]>
Subject: RE: I/O Intr scanning
Hi Pilar,
First, you have not provided enough information to let us help you figure out the problem. What is your driver doing when you write BoardIDSet? What you are trying to do should work, since there are lots
of other drivers that do the same sort of thing with no problems.
Second, you have set some compiler flags so that you are getting very little useful information in your traceback. It is not showing you the line numbers, or demangling the C++ function names.
I have manually demangled the names of the last 3 functions called:
/home/epicsmgr/EPICS/support/asyn/lib/linux-x86_64/libasyn.so(_ZN8paramValD1Ev+0x11)[0x7f145d2d7611]
This is paramVal::~paramVal(), in asynPortDriver.
/home/xxx/bpm/bpm_epics/lib/linux-x86_64/libewbasyn.so(_ZN15EWBAsynGenPVPrmD0Ev+0x9)[0x7f145c09bec9]
This is EWBAsynGenPVPrm::~EWBAsynGenPVPrm(), in your class
/home/xxx/bpm/bpm_epics/lib/linux-x86_64/libewbasyn.so(_ZN15EWBAsynPortDrvr10writeToDevEii+0x4e)[0x7f145c09ad1e]
This is EWBAsynPortDrvr::writeToDev(int, int)
So your writeToDev function is calling the destructor for your EWBAsynGenPVPrm object, which is in turn calling the destructor for the paramVal object. This seems unusual. What object are you destroying when
a new integer value is written to your driver?
You need a better traceback, and you will need to send your code if we are to help.
Mark
Dear all,
I'm using a asynPortDriver (4.33) with EPICS base (3.16).
The way I create my asynPortDriver is:
EWBAsynPortDrvr(const char *portName,int max_nprm)
: asynPortDriver(portName,
1,
(asynInt32Mask | asynFloat64Mask | asynOctetMask | asynDrvUserMask), /* Interface mask */
(asynInt32Mask | asynFloat64Mask | asynOctetMask), /* Interrupt mask */
0, /* asynFlags. This driver does not block and it is not multi-device, so flag is 0 */
1, /* Autoconnect */
0, /* Default priority */
0), /* Default stack size*/
and I have one example PV defined as:
record(ao, "$(user):BoardIDSet")
{
field(DTYP ,"asynInt32")
field(OUT ,"@asyn($(PORT),$(ADDR),$(TIMEOUT))board_ID")
field(DESC ,"Board Identification")
field(VAL , "3")
field(LOPR, "0")
field(HOPR, "5")
field(PINI ,"YES")
}
record(ai, "$(user):BoardIDRdbk")
{
field(DTYP ,"asynInt32")
field(INP ,"@asyn($(PORT),$(ADDR),$(TIMEOUT))board_ID")
field(SCAN ,"I/O Intr")
field(DESC ,"Board Identification")
}
If I set BoardIDSet to a certain value (for example: 3) BoardIDRdbk does not see the change and it doesnt get updated. But if I try to write again BoardIDSet following error ocurrs:
Error in `/home/sevensols/bpm/bpm_epics/bin/linux-x86_64/AsynBPM7S': double free or corruption (fasttop): 0x00000000023e1b70 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x81489)[0x7f145ae31489]
/home/epicsmgr/EPICS/support/asyn/lib/linux-x86_64/libasyn.so(_ZN8paramValD1Ev+0x11)[0x7f145d2d7611]
/home/xxx/bpm/bpm_epics/lib/linux-x86_64/libewbasyn.so(_ZN15EWBAsynGenPVPrmD0Ev+0x9)[0x7f145c09bec9]
/home/xxx/bpm/bpm_epics/lib/linux-x86_64/libewbasyn.so(_ZN15EWBAsynPortDrvr10writeToDevEii+0x4e)[0x7f145c09ad1e]
/home/epicsmgr/EPICS/support/asyn/lib/linux-x86_64/libasyn.so(+0x37ae2)[0x7f145d2d8ae2]
/home/epicsmgr/EPICS/support/asyn/lib/linux-x86_64/libasyn.so(+0x44be5)[0x7f145d2e5be5]
/home/epicsmgr/EPICS/support/asyn/lib/linux-x86_64/libasyn.so(+0x16658)[0x7f145d2b7658]
/home/epicsmgr/EPICS/support/asyn/lib/linux-x86_64/libasyn.so(+0x45af9)[0x7f145d2e6af9]
/home/epicsmgr/EPICS/base/lib/linux-x86_64/libdbRecStd.so.3.16.1(+0xe998)[0x7f145ce3d998]
/home/epicsmgr/EPICS/base/lib/linux-x86_64/libdbCore.so.3.16.1(dbProcess+0x1d8)[0x7f145cbc4508]
/home/epicsmgr/EPICS/base/lib/linux-x86_64/libdbCore.so.3.16.1(dbPutField+0x3ce)[0x7f145cbc617e]
/home/epicsmgr/EPICS/base/lib/linux-x86_64/libdbCore.so.3.16.1(dbChannel_put+0x9e)[0x7f145cbe07fe]
/home/epicsmgr/EPICS/base/lib/linux-x86_64/libdbCore.so.3.16.1(+0x648a4)[0x7f145cc068a4]
/home/epicsmgr/EPICS/base/lib/linux-x86_64/libdbCore.so.3.16.1(camessage+0x9d)[0x7f145cc0515d]
/home/epicsmgr/EPICS/base/lib/linux-x86_64/libdbCore.so.3.16.1(camsgtask+0x13c)[0x7f145cc0203c]
/home/epicsmgr/EPICS/base/lib/linux-x86_64/libCom.so.3.16.1(+0x40b6c)[0x7f145c706b6c]
Can somebody tell me whay the I/O Scan is not working? And also why this error ocurrs
Thank you very much in advance!
--
Pilar Gil Jaldo
Embedded SW Engineer
This e-mail and any materials attached hereto, including, without limitation, all content hereof and thereof are confidential and proprietary to Seven Solutions,S.L
and/or its affiliates, and are *confidential*. Without the prior written consent of Seven Solutions, this content may not (i) be disclosed to any third party, (ii) be reproduced, modified
or otherwise used by anyone other than current employees of Seven Solutions or its affiliates. If you are not the intended recipient or if this message has been received in error, please immediately notify us via e-mail and delete it.
This e-mail and any materials attached hereto, including, without limitation, all content hereof and thereof are confidential and proprietary to Seven Solutions,S.L
and/or its affiliates, and are *confidential*. Without the prior written consent of Seven Solutions, this content may not (i) be disclosed to any third party, (ii) be reproduced, modified or otherwise used by anyone other than current employees of Seven Solutions
or its affiliates. If you are not the intended recipient or if this message has been received in error, please notify us immediately via e-mail and delete it.