EPICS Home

Experimental Physics and Industrial Control System


 
2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  <20172018  2019  2020  2021  2022  2023  2024  Index 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  <20172018  2019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: Re: terminate called after throwing an instance of 'epicsMutex::invalidMutex'
From: Marty Kraimer <[email protected]>
To: Michael Davidsaver <[email protected]>, Heinz Junkes <[email protected]>, [email protected]
Date: Tue, 6 Jun 2017 07:57:17 -0400
On 06/06/2017 05:05 AM, Michael Davidsaver wrote:
On 06/04/2017 09:16 PM, Marty Kraimer wrote:
On 06/04/2017 01:32 PM, Heinz Junkes wrote:
I replaced pvaClientCPP and pvAccessCPP with the code you provide

Now the tests runs without error:
Good news!!!

I did make some more changes to
https://github.com/mrkraimer/pvAccessCPP/

The changes resulted from suggestions made by Michael Davidsaver.
Well, at least some of them.

FYI. this is what I'm doing

https://github.com/mdavidsaver/pvAccessCPP/commit/6926d911eeb1b8ccb4da14ed7717f381379a7434

This is only the first part though, dealing with the problems in
caProvider.cpp.

The larger issue I see is that the "conventional" implementations of
ChannelProviderFactory::sharedInstance() has the factory keep a strong
ChannelProvider reference.

For my work on P4P server side this was causing problems as all python
objects should be destroyed well before the global provider factory
map<> is destroyed.  This resulted in an attempt to take the GIL after
it had been free'd.  So if a removeProvider() is omitted, then the
process crashes on exit.

My first change is to turn this strong ref. into a weak ref.  This means
that destruction of the registry no longer has side-effects related to
provider destruction.

In clearing up some potential global ctor/dtor ordering issues, the
global registry (a la. getChannelProviderRegistry() ) is no longer
free'd.  As it hold only weak refs. there seemed to me no downside other
than a "reachable" leak.




I tried building with

https://github.com/mdavidsaver/pvAccessCPP


But pvaSrv does not build.
I get

make[2]: Entering directory '/home/epicsv4/master/pvaSrv/src/O.linux-x86_64'
/usr/bin/g++ -o softIocPVA -L/home/epicsv4/master/pvaSrv/lib/linux-x86_64 -L/home/epicsv4/master/pvAccessCPP/lib/linux-x86_64 -L/home/epicsv4/master/pvDataCPP/lib/linux-x86_64 -L/home/install/epics/base-3.15.5/lib/linux-x86_64 -Wl,-rpath,/home/epicsv4/master/pvaSrv/lib/linux-x86_64 -Wl,-rpath,/home/epicsv4/master/pvAccessCPP/lib/linux-x86_64 -Wl,-rpath,/home/epicsv4/master/pvDataCPP/lib/linux-x86_64 -Wl,-rpath,/home/install/epics/base-3.15.5/lib/linux-x86_64 -rdynamic -m64 softMain.o softIocPVA_registerRecordDeviceDriver.o -lpvaSrv -lpvAccess -lpvData -ldbRecStd -ldbCore -lca -lCom softIocPVA_registerRecordDeviceDriver.o: In function `softIocPVA_registerRecordDeviceDriver': /home/epicsv4/master/pvaSrv/src/O.linux-x86_64/softIocPVA_registerRecordDeviceDriver.cpp:245: undefined reference to `pvar_func_registerStartPVAServer'
collect2: error: ld returned 1 exit status
/home/install/epics/base/configure/RULES_BUILD:201: recipe for target 'softIocPVA' failed
make[2]: *** [softIocPVA] Error 1
make[2]: Leaving directory '/home/epicsv4/master/pvaSrv/src/O.linux-x86_64'
/home/install/epics/base/configure/RULES_ARCHS:58: recipe for target 'install.linux-x86_64' failed
make[1]: *** [install.linux-x86_64] Error 2
make[1]: Leaving directory '/home/epicsv4/master/pvaSrv/src'
/home/install/epics/base/configure/RULES_DIRS:84: recipe for target 'src.install' failed
make: *** [src.install] Error 2
mrk>

https://github.com/mdavidsaver/pvAccessCPP/


References:
terminate called after throwing an instance of 'epicsMutex::invalidMutex' Heinz Junkes
Re: terminate called after throwing an instance of 'epicsMutex::invalidMutex' Marty Kraimer
Re: terminate called after throwing an instance of 'epicsMutex::invalidMutex' Heinz Junkes
Re: terminate called after throwing an instance of 'epicsMutex::invalidMutex' Marty Kraimer
Re: terminate called after throwing an instance of 'epicsMutex::invalidMutex' Michael Davidsaver

Navigate by Date:
Prev: Re: terminate called after throwing an instance of 'epicsMutex::invalidMutex' Michael Davidsaver
Next: binding trouble if Port is already in use, src/ioc/rsrv/caservertask.c Heinz Junkes
Index: 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  <20172018  2019  2020  2021  2022  2023  2024 
Navigate by Thread:
Prev: Re: terminate called after throwing an instance of 'epicsMutex::invalidMutex' Michael Davidsaver
Next: Build problem Mark Rivers
Index: 2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  <20172018  2019  2020  2021  2022  2023  2024