From: David Feil-S. <dfs...@cs...> - 2004-10-06 22:41:16
|
I'm getting a segfault when I have a sonyevid30 driver in my config file: Program received signal SIGSEGV, Segmentation fault. 0x402d7fc2 in pthread_mutex_lock () from /lib/libpthread.so.0 (gdb) bt #0 0x402d7fc2 in pthread_mutex_lock () from /lib/libpthread.so.0 #1 0x08064f6d in ClientManager::DataAvailable() (this=0x4) at clientmanager.cc:392 #2 0x080627b8 in Driver::PutData(player_device_id, void*, unsigned, timeval*) (this=0x8135b58, id={code = 8, index = 0, port = 6665}, src=0x0, len=10, timestamp=0x0) at driver.cc:193 #3 0x080918fb in SonyEVID30 (this=0x8135b58, cf=0x80e8be0, section=5) at driver.h:184 #4 0x080914f0 in SonyEVID30_Init(ConfigFile*, int) (cf=0x0, section=0) at sonyevid30.cc:178 #5 0x08067146 in ParseDeviceEx(ConfigFile*, int) (cf=0x80e8be0, section=5) at main.cc:974 #6 0x08067444 in ParseConfigFile(char*, int**, int*) ( fname=0x5 <Address 0x5 out of bounds>, ports=0xbfffe928, num_ports=0xbfffe92c) at main.cc:1065 #7 0x0806776a in main (argc=2, argv=0xbffff9f4) at main.cc:1377 Here's the config file: driver ( name "p2os" devices ["position:0"] port "/dev/tts/0" ) driver ( name "sicklms200" provides ["laser:0"] port "/dev/tts/1" delay 0 pose [0.15 0 0] resolution 50 range_res 1 invert 0 ) driver ( name "camerav4l" provides ["camera:0"] fov [3 30] ) driver ( name "laservisualbw" provides ["fiducial:0"] laser 0 ptz 0 camera 0 bit_width 0.48 bit_count 5 ) driver ( name "sonyevid30" provides ["ptz:0"] port "/dev/tts/3" fov [3 30] ) |
From: Brian G. <ge...@ai...> - 2004-10-06 23:08:50
|
On Wed, 6 Oct 2004, David Feil-Seifer wrote: > I'm getting a segfault when I have a sonyevid30 driver in my config > file: Looks like SonyEVID30 is calling PutData() in its constructor. In the past this has been not recommended, because if the driver needs to intialize some data or command structures, it should do so in Setup(), so that the initialization happens every time the driver is freshly started, rather than just once when it is created. Now I'll go ahead and say that it's not allowed. I'll be more specific when I update the Driver documentation, but, in a nutshell, don't invoke any Driver methods in your constructor other than AddInterface and SetError. Everything else should be done in or after Setup(). The immediate reason for this segfault is that PutData() tries to call DataAvailable() on the ClientManager, which hasn't yet been created when the driver constructors are called. I've just added a check for that, so that a warning is printed instead of having a crash. Everyone should feel free to fix any drivers that elicit this warning. brian. > Program received signal SIGSEGV, Segmentation fault. > 0x402d7fc2 in pthread_mutex_lock () from /lib/libpthread.so.0 > (gdb) bt > #0 0x402d7fc2 in pthread_mutex_lock () from /lib/libpthread.so.0 > #1 0x08064f6d in ClientManager::DataAvailable() (this=0x4) > at clientmanager.cc:392 > #2 0x080627b8 in Driver::PutData(player_device_id, void*, unsigned, > timeval*) > (this=0x8135b58, id={code = 8, index = 0, port = 6665}, src=0x0, > len=10, > timestamp=0x0) at driver.cc:193 > #3 0x080918fb in SonyEVID30 (this=0x8135b58, cf=0x80e8be0, section=5) > at driver.h:184 > #4 0x080914f0 in SonyEVID30_Init(ConfigFile*, int) (cf=0x0, section=0) > at sonyevid30.cc:178 > #5 0x08067146 in ParseDeviceEx(ConfigFile*, int) (cf=0x80e8be0, > section=5) > at main.cc:974 > #6 0x08067444 in ParseConfigFile(char*, int**, int*) ( > fname=0x5 <Address 0x5 out of bounds>, ports=0xbfffe928, > num_ports=0xbfffe92c) at main.cc:1065 > #7 0x0806776a in main (argc=2, argv=0xbffff9f4) at main.cc:1377 > > > Here's the config file: > > driver > ( > name "p2os" > devices ["position:0"] > port "/dev/tts/0" > ) > > driver > ( > name "sicklms200" > provides ["laser:0"] > port "/dev/tts/1" > delay 0 > pose [0.15 0 0] > resolution 50 > range_res 1 > invert 0 > ) > > driver > ( > name "camerav4l" > provides ["camera:0"] > fov [3 30] > ) > > driver > ( > name "laservisualbw" > provides ["fiducial:0"] > laser 0 > ptz 0 > camera 0 > bit_width 0.48 > bit_count 5 > ) > > driver > ( > name "sonyevid30" > provides ["ptz:0"] > port "/dev/tts/3" > fov [3 30] > ) > > > > > ------------------------------------------------------- > This SF.net email is sponsored by: IT Product Guide on ITManagersJournal > Use IT products in your business? Tell us what you think of them. Give us > Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out more > http://productguide.itmanagersjournal.com/guidepromo.tmpl > _______________________________________________ > Playerstage-developers mailing list > Pla...@li... > https://lists.sourceforge.net/lists/listinfo/playerstage-developers > -- Brian P. Gerkey ge...@ai... Stanford AI Lab http://ai.stanford.edu/~gerkey |
From: Richard v. <va...@cs...> - 2004-10-07 00:05:50
|
On 6-Oct-04, at 4:08 PM, Brian Gerkey wrote: > On Wed, 6 Oct 2004, David Feil-Seifer wrote: > >> I'm getting a segfault when I have a sonyevid30 driver in my config >> file: > > Looks like SonyEVID30 is calling PutData() in its constructor. In the > past this has been not recommended, because if the driver needs to > intialize some data or command structures, it should do so in Setup(), > so that the initialization happens every time the driver is freshly > started, rather than just once when it is created. > > Now I'll go ahead and say that it's not allowed. I'll be more specific > when I update the Driver documentation, but, in a nutshell, don't > invoke any Driver methods in your constructor other than AddInterface > and SetError. Everything else should be done in or after Setup(). > > The immediate reason for this segfault is that PutData() tries to call > DataAvailable() on the ClientManager, which hasn't yet been created > when > the driver constructors are called. I've just added a check for that, > so that a warning is printed instead of having a crash. Everyone > should > feel free to fix any drivers that elicit this warning. > Besides, it's a bad idea to call any virtual method inside a constructor. C++ does not define the type of 'this' until the constructor is done. Different compilers do the binding at different times, so you don't know which virtual function will be called. Richard. -- Richard Vaughan School of Computing Science / Simon Fraser University |
From: Toby C. <tco...@di...> - 2004-10-07 06:50:05
|
This was one of the errors I fixed with my patch yesterday, Basically I just removed the call to Putdata. Toby Richard vaughan wrote: > > On 6-Oct-04, at 4:08 PM, Brian Gerkey wrote: > >> On Wed, 6 Oct 2004, David Feil-Seifer wrote: >> >>> I'm getting a segfault when I have a sonyevid30 driver in my config >>> file: >> >> >> Looks like SonyEVID30 is calling PutData() in its constructor. In the >> past this has been not recommended, because if the driver needs to >> intialize some data or command structures, it should do so in Setup(), >> so that the initialization happens every time the driver is freshly >> started, rather than just once when it is created. >> >> Now I'll go ahead and say that it's not allowed. I'll be more specific >> when I update the Driver documentation, but, in a nutshell, don't >> invoke any Driver methods in your constructor other than AddInterface >> and SetError. Everything else should be done in or after Setup(). >> >> The immediate reason for this segfault is that PutData() tries to call >> DataAvailable() on the ClientManager, which hasn't yet been created when >> the driver constructors are called. I've just added a check for that, >> so that a warning is printed instead of having a crash. Everyone should >> feel free to fix any drivers that elicit this warning. >> > > Besides, it's a bad idea to call any virtual method inside a > constructor. C++ does not define the type of 'this' until the > constructor is done. Different compilers do the binding at different > times, so you don't know which virtual function will be called. > > Richard. > > > -- > Richard Vaughan > School of Computing Science / Simon Fraser University > > > > ------------------------------------------------------- > This SF.net email is sponsored by: IT Product Guide on ITManagersJournal > Use IT products in your business? Tell us what you think of them. Give us > Your Opinions, Get Free ThinkGeek Gift Certificates! Click to find out > more > http://productguide.itmanagersjournal.com/guidepromo.tmpl > _______________________________________________ > Playerstage-developers mailing list > Pla...@li... > https://lists.sourceforge.net/lists/listinfo/playerstage-developers > |