EPICS Controls Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  <20022003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024  Index 1994  1995  1996  1997  1998  1999  2000  2001  <20022003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
<== Date ==> <== Thread ==>

Subject: Re: caTCL with R3.14 and Linux
From: Benjamin Sailer <[email protected]>
To: EPICS Tech-Talk <[email protected]>
Date: Tue, 29 Jan 2002 11:19:12 +0100 (CET)
Hello Andy (and anybody else),

> 
> Hi Benjamin,
> 
> I had the same problem with "threadInit" when compiling against
> 3.13.4 under Solaris 8.
> My solution was to comment the call out of the code.
> 
> Cheers,
> 
> Andy

thanks for the answer. Unfortunately, I tried this out before, but this
resulted in a crash as soon as the first "pv" command had to be executed
in my little test-tcl/tk-script:

#!/path/to/et_wish

set pvnum 0

entry .pvname -relief sunken -textvariable pvname -width 30
pack .pvname
bind .pvname <Return> {
    set pvname$pvnum $pvname
    set pvvalue$pvnum 0
    pv link pvvalue$pvnum [set pvname$pvnum]
    set pvlink$pvnum 1
    pv mon pvvalue$pvnum
    frame .pv$pvnum
    button .pvswitch$pvnum -command {
        if {[set pvswitch$pvnum] == 1} {
            set pvswitch$pvnum 0
            pv umon pvvalue$pvnum
        } else {
            set pvswitch$pvnum 1
            pv mon pvvalue$pvnum
        }
    } -text [format "%s: %d" [set pvname$pvnum] [set pvvalue$pvnum]] -width 20
    entry .pvshow$pvnum -textvariable pvvalue$pvnum
    pack .pvswitch$pvnum .pvshow$pvnum -in .pv$pvnum -side left -fill x
    pack .pv$pvnum -fill x
    set pvname ""
    incr pvnum 1
}

looking into the debugger, I saw
Starting program: /path/to/et_wish bar.tcl
[New Thread 1024 (LWP 4585)]
[New Thread 2049 (LWP 4586)]
[New Thread 1026 (LWP 4587)]
[New Thread 2051 (LWP 4588)]
Warning: Duplicate EPICS CA Address list entry "129.187.154.22:5064" discarded
Warning: Duplicate EPICS CA Address list entry "129.187.154.76:5064" discarded
Warning: Duplicate EPICS CA Address list entry "129.187.154.77:5064" discarded
Warning: Duplicate EPICS CA Address list entry "129.187.154.98:5064" discarded
Warning: Duplicate EPICS CA Address list entry "129.187.154.104:5064" discarded
Warning: Duplicate EPICS CA Address list entry "129.187.154.107:5064" discarded
[New Thread 3076 (LWP 4589)]
[New Thread 4101 (LWP 4590)]
[New Thread 5126 (LWP 4591)]

Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 4101 (LWP 4590)]
0x4053e07c in memcpy () from /lib/i686/libc.so.6
(gdb) where
#0  0x4053e07c in memcpy () from /lib/i686/libc.so.6
#1  0x00000016 in ?? ()
#2  0x402eae2e in getCallback::exception ()
   from /home/bsailer/lib/I686_LINUX_2_4_9_6/epics_new/libca.so
#3  0x402df805 in netReadNotifyIO::exception ()
   from /home/bsailer/lib/I686_LINUX_2_4_9_6/epics_new/libca.so
#4  0x402e5e35 in cac::ioExceptionNotifyAndDestroy ()
   from /home/bsailer/lib/I686_LINUX_2_4_9_6/epics_new/libca.so
#5  0x402e84a1 in cac::readNotifyRespAction ()
   from /home/bsailer/lib/I686_LINUX_2_4_9_6/epics_new/libca.so
#6  0x402e891c in cac::executeResponse ()
   from /home/bsailer/lib/I686_LINUX_2_4_9_6/epics_new/libca.so
#7  0x402cd69d in tcpiiu::processIncoming ()
   from /home/bsailer/lib/I686_LINUX_2_4_9_6/epics_new/libca.so
#8  0x402cb995 in cacRecvThreadTCP ()
   from /home/bsailer/lib/I686_LINUX_2_4_9_6/epics_new/libca.so
#9  0x40347ed9 in start_routine ()
   from /home/bsailer/lib/I686_LINUX_2_4_9_6/epics_new/libCom.so
#10 0x4001ec6f in pthread_start_thread (arg=0x40ea9be0) at manager.c:284
#11 0x4001ed5f in pthread_start_thread_event (arg=0x40ea9be0) at manager.c:308

I'm sorry I'm not sure if this is connected to the caServer I developed
on basis of the libcas.a (using R3.13.3).

E.g. it seems that my server is not able to answer all differnt application
types ca_test queries:

ca_test-output is:
bsailer@brian $ ca_test HAD:EB2:EB2PP:ERROR
name:   HAD:EB2:EB2PP:ERROR
native type:    4
native count:   1
DBR_STRING
DBR_SHORT       0 
DBR_FLOAT       0.0000 
DBR_ENUM        0 
DBR_CHAR        0 
DBR_LONG        0 
DBR_DOUBLE      0.0000 
DBR_STS_STRING   0  0   Value: 
DBR_STS_SHORT    0  0   Value: 0 
DBR_STS_FLOAT    0  0   Value: 0.0000 
DBR_STS_ENUM     0  0   Value: 0 
DBR_STS_CHAR     0  0   Value: 0 
DBR_STS_LONG     0  0   Value: 0 
DBR_STS_DOUBLE   0  0   Value: 0.0000 
DBR_TIME_STRING  0  0   TimeStamp: 01/29/22 04:00:00.000        Value: 
DBR_TIME_SHORT   0  0   TimeStamp: 01/29/22 04:00:00.000        Value: 0 
DBR_TIME_FLOAT   0  0   TimeStamp: 01/29/22 04:00:00.000        Value: 0.0000 
DBR_TIME_ENUM    0  0   TimeStamp: 01/29/22 04:00:00.000        Value: 0 
DBR_TIME_CHAR    0  0   TimeStamp: 01/29/22 04:00:00.000        Value: 0 
DBR_TIME_LONG    0  0   TimeStamp: 01/29/22 04:00:00.000        Value: 0 
DBR_TIME_DOUBLE  0  0   TimeStamp: 01/29/22 04:00:00.000        Value: 0.0000 
DBR_GR_STRING    0  0   Value: 
../ca_test.c: err resp to get cb was "Could not perform a database value get for that channel"
../ca_test.c: err resp to get cb was "Could not perform a database value get for that channel"
../ca_test.c: err resp to get cb was "Could not perform a database value get for that channel"
../ca_test.c: err resp to get cb was "Could not perform a database value get for that channel"
../ca_test.c: err resp to get cb was "Could not perform a database value get for that channel"
../ca_test.c: err resp to get cb was "Could not perform a database value get for that channel"
DBR_CTRL_STRING  0  0   Value: 
../ca_test.c: err resp to get cb was "Could not perform a database value get for that channel"
../ca_test.c: err resp to get cb was "Could not perform a database value get for that channel"
../ca_test.c: err resp to get cb was "Could not perform a database value get for that channel"
../ca_test.c: err resp to get cb was "Could not perform a database value get for that channel"
../ca_test.c: err resp to get cb was "Could not perform a database value get for that channel"
../ca_test.c: err resp to get cb was "Could not perform a database value get for that channel"


bsailer@brian $ 

while my server states:

unregisted appl type - ukn appl type code = 14

Operation not permitted <= get callback failure detail not passed to client
unregisted appl type - ukn appl type code = 14

Operation not permitted <= get callback failure detail not passed to client
unregisted appl type - ukn appl type code = 17

Operation not permitted <= get callback failure detail not passed to client
unregisted appl type - ukn appl type code = 14

Operation not permitted <= get callback failure detail not passed to client
unregisted appl type - ukn appl type code = 14

Operation not permitted <= get callback failure detail not passed to client
unregisted appl type - ukn appl type code = 14

Operation not permitted <= get callback failure detail not passed to client
unregisted appl type - ukn appl type code = 14

Operation not permitted <= get callback failure detail not passed to client
unregisted appl type - ukn appl type code = 14

Operation not permitted <= get callback failure detail not passed to client
unregisted appl type - ukn appl type code = 17

Operation not permitted <= get callback failure detail not passed to client
unregisted appl type - ukn appl type code = 14

Operation not permitted <= get callback failure detail not passed to client
unregisted appl type - ukn appl type code = 14

Operation not permitted <= get callback failure detail not passed to client
unregisted appl type - ukn appl type code = 14

Operation not permitted <= get callback failure detail not passed to client

I did not find the application type corresponding to thiese two codes,
and to speak honestly I am not eger to implement all of these types - I'd
rather safe some space in the memory (this server should also work
on a LynxOS VME PPC and the main part of 32MB on these should be reserved
for DAQ-processes).

I tried to implement a read function for "enums" and "menuitem", but I didn't
get the concept of these record types and how to merge this with the
gdd::putConvert() function (my code looks like

gddAppFuncTableStatus ControlRecord::readMenuitem(gdd &value) {
    if((myValue >= 0) && (myValue < numMenuitems)) {
        value.putConvert(menuitem[myValue]);
        return S_casApp_success;
    } else {
        return S_casApp_noSupport;
    }
    return S_casApp_success;
}

but the only thing I know about this is that it cannot work :-().

Can anybody give me some hints what I did wrong or what the philosophy is
behind the caServer?

Thanks a lot

Benjamin

-- 
*****************************************************************
Benjamin Sailer
eMail: [email protected]
*****************************************************************
You'll see it's all a show, keep on laughing as You go
just remember that the last laugh is on You



Replies:
RE: caTCL with R3.14 and Linux Jeff Hill
References:
Re: caTCL with R3.14 and Linux Andy Foster

Navigate by Date:
Prev: CapFast PC training license Dr. Chong Lee
Next: Newbie question: symb.dbd in example application John Dobbins
Index: 1994  1995  1996  1997  1998  1999  2000  2001  <20022003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
Navigate by Thread:
Prev: Re: caTCL with R3.14 and Linux Andy Foster
Next: RE: caTCL with R3.14 and Linux Jeff Hill
Index: 1994  1995  1996  1997  1998  1999  2000  2001  <20022003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  2015  2016  2017  2018  2019  2020  2021  2022  2023  2024 
ANJ, 10 Aug 2010 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· Search · EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·