Go Back   ZeroC Forums > Bug Reports

Reply
 
LinkBack Thread Tools Rate Thread Display Modes
  #1 (permalink)  
Old 05-16-2007
joshmoore joshmoore is offline
Registered User
 
Name: Josh Moore
Organization: Glencoe Software, Inc.
Project: OMERO, http://trac.openmicroscopy.org.uk/omero
 
Join Date: Feb 2007
Location: Germany
Posts: 59
Known issues with mixing 32bit/64bit systems?

Currently we are having issues crossing 32/64 bit boundaries. Our server is written in Java. When a C++ client on a 64 bit machine accesses the server on a 32bit machine one of two exceptions are raised in indeterminate order (32/32 and 64/64 combinations work fine):

(1) Most frequently:

Code:
Exception:
BasicStream.cpp:363: Ice::NegativeSizeException:
protocol error: negative size for sequence, dictionary, etc.
at

Code:
(gdb) bt
#0  0x00002aaaac2330e0 in __cxa_throw () from /usr/lib/gcc/x86_64-pc-linux-gnu/3.4.6/libstdc++.so.6
#1  0x00002aaaaac59ace in IceInternal::BasicStream::skipSlice () from /usr/lib/libIce.so.32
#2  0x00002aaaaac5f4fa in IceInternal::BasicStream::read () from /usr/lib/libIce.so.32
#3  0x00002aaaab9ce2d1 in omero::model::__read () from ../lib/64bit/libOMERO_common.so.0
#4  0x00002aaaab9ce544 in omero::model::Event::__read () from ../lib/64bit/libOMERO_common.so.0
#5  0x00002aaaaac5fd98 in IceInternal::BasicStream::read () from /usr/lib/libIce.so.32
#6  0x00002aaaaac60246 in IceInternal::BasicStream::readPendingObjects () from /usr/lib/libIce.so.32
#7  0x00002aaaabbad637 in IceDelegateM::omero::api::IUpdate::saveAndReturnObject () from ../lib/64bit/libOMERO_common.so.0
#8  0x00002aaaabb53fe6 in IceProxy::omero::api::IUpdate::saveAndReturnObject () from ../lib/64bit/libOMERO_common.so.0
#9  0x0000000000418645 in IceProxy::omero::api::IUpdate::saveAndReturnObject (this=0x574a60, obj=@0x7fffff991260) at ../include/OMERO/API.h:1848
#10 0x0000000000409ed8 in main (argc=1, argv=0x7fffff991538) at SDK.cpp:261
or

Code:
(gdb) bt     
#0  0x00002aaaac2330e0 in __cxa_throw () from /usr/lib/gcc/x86_64-pc-linux-gnu/3.4.6/libstdc++.so.6
#1  0x00002aaaaac59798 in IceInternal::BasicStream::throwNegativeSizeException () from /usr/lib/libIce.so.32
#2  0x00002aaaab9dee4a in omero::model::__read () from ../lib/64bit/libOMERO_common.so.0
#3  0x00002aaaab9def97 in omero::model::Experimenter::__read () from ../lib/64bit/libOMERO_common.so.0
#4  0x00002aaaaac5fd98 in IceInternal::BasicStream::read () from /usr/lib/libIce.so.32
#5  0x00002aaaaac60246 in IceInternal::BasicStream::readPendingObjects () from /usr/lib/libIce.so.32
#6  0x00002aaaabbad637 in IceDelegateM::omero::api::IUpdate::saveAndReturnObject () from ../lib/64bit/libOMERO_common.so.0
#7  0x00002aaaabb53fe6 in IceProxy::omero::api::IUpdate::saveAndReturnObject () from ../lib/64bit/libOMERO_common.so.0
#8  0x0000000000418645 in IceProxy::omero::api::IUpdate::saveAndReturnObject (this=0x574a60, obj=@0x7ffffff754b0) at ../include/OMERO/API.h:1848
#9  0x0000000000409ed8 in main (argc=1, argv=0x7ffffff75788) at SDK.cpp:261
(2) less frequently

Code:
Exception:
BasicStream.cpp:1654: Ice::NoObjectFactoryException:
protocol error: no suitable object factory found for `':
class sliced to ::Ice::Object, which is abstract
at

Code:
(gdb) bt
#0  0x00002aaaac2330e0 in __cxa_throw () from /usr/lib/gcc/x86_64-pc-linux-gnu/3.4.6/libstdc++.so.6
#1  0x00002aaaaac5fbd7 in IceInternal::BasicStream::read () from /usr/lib/libIce.so.32
#2  0x00002aaaab9daa41 in omero::model::__read () from ../lib/64bit/libOMERO_common.so.0
#3  0x00002aaaab9dac8e in omero::model::ExperimenterGroup::__read () from ../lib/64bit/libOMERO_common.so.0
#4  0x00002aaaaac5fd98 in IceInternal::BasicStream::read () from /usr/lib/libIce.so.32
#5  0x00002aaaaac60246 in IceInternal::BasicStream::readPendingObjects () from /usr/lib/libIce.so.32
#6  0x00002aaaabbad637 in IceDelegateM::omero::api::IUpdate::saveAndReturnObject () from ../lib/64bit/libOMERO_common.so.0
#7  0x00002aaaabb53fe6 in IceProxy::omero::api::IUpdate::saveAndReturnObject () from ../lib/64bit/libOMERO_common.so.0
#8  0x0000000000418645 in IceProxy::omero::api::IUpdate::saveAndReturnObject (this=0x574a60, obj=@0x7fffff87c760) at ../include/OMERO/API.h:1848
#9  0x0000000000409ed8 in main (argc=1, argv=0x7fffff87ca38) at SDK.cpp:261



For a server:

Code:
java version "1.6.0_01"
Java(TM) SE Runtime Environment (build 1.6.0_01-b06)
Java HotSpot(TM) Server VM (build 1.6.0_01-b06, mixed mode)
Also tried on :

Code:
java version "1.6.0"
Java(TM) SE Runtime Environment (build 1.6.0-b105)
Java HotSpot(TM) Server VM (build 1.6.0-b105, mixed mode)
Code:
Linux valewalker 2.6.16-gentoo-r13 #3 SMP PREEMPT Wed Apr 25 15:55:21 BST 2007 i686 Intel(R) Xeon(TM) CPU 1.60GHz GenuineIntel GNU/Linux

        libIce.so.32 => /homes/jmoore/lib/ice/lib/libIce.so.32 (0xb7d18000)
        libIceUtil.so.32 => /homes/jmoore/lib/ice/lib/libIceUtil.so.32 (0xb7ce5000)
        libSlice.so.32 => /homes/jmoore/lib/ice/lib/libSlice.so.32 (0xb7bb1000)
        libGlacier2.so.32 => /homes/jmoore/lib/ice/lib/libGlacier2.so.32 (0xb7b36000)
        libstdc++.so.6 => /usr/lib/gcc/i686-pc-linux-gnu/4.1.1/libstdc++.so.6 (0xb7a55000)
        libm.so.6 => /lib/libm.so.6 (0xb7a30000)
        libc.so.6 => /lib/libc.so.6 (0xb7912000)
        libgcc_s.so.1 => /usr/lib/gcc/i686-pc-linux-gnu/4.1.1/libgcc_s.so.1 (0xb7907000)
        libbz2.so.1 => /lib/libbz2.so.1 (0xb78f6000)
        libdl.so.2 => /lib/libdl.so.2 (0xb78f2000)
        libpthread.so.0 => /lib/libpthread.so.0 (0xb78a0000)
        /lib/ld-linux.so.2 (0x80000000)
and a client:

Code:
Linux warlock 2.6.15-gentoo #3 SMP Wed Jan 11 10:31:26 GMT 2006 x86_64 AMD Opteron(tm) Processor 252 AuthenticAMD GNU/Linux

        libIce.so.32 => /usr/lib/libIce.so.32 (0x00002aaaab936000)
        libIceUtil.so.32 => /usr/lib/libIceUtil.so.32 (0x00002aaaabc77000)
        libSlice.so.32 => /usr/lib/libSlice.so.32 (0x00002aaaabdad000)
        libGlacier2.so.32 => /usr/lib/libGlacier2.so.32 (0x00002aaaabfec000)
        libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/3.4.6/libstdc++.so.6 (0x00002aaaac176000)
        libm.so.6 => /lib/libm.so.6 (0x00002aaaac366000)
        libc.so.6 => /lib/libc.so.6 (0x00002aaaac4ed000)
        libgcc_s.so.1 => /usr/lib/gcc/x86_64-pc-linux-gnu/3.4.6/libgcc_s.so.1 (0x00002aaaac713000)
        libbz2.so.1 => /lib/libbz2.so.1 (0x00002aaaac81e000)
        libdl.so.2 => /lib/libdl.so.2 (0x00002aaaac92e000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x00002aaaaca31000)
        /lib64/ld-linux-x86-64.so.2 (0x0000555555554000)
If I reverse these, using

Code:
java version "1.5.0_11"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_11-b03)
Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_11-b03, mixed mode)
on the 64-bit server, I get similar exceptions:

Code:
Exception:
BasicStream.cpp:200: Ice::UnmarshalOutOfBoundsException:
protocol error: out of bounds during unmarshaling
at

Code:
0x40e56265 in __cxa_throw () from /usr/lib/gcc/i686-pc-linux-gnu/4.1.1/libstdc++.so.6
#0  0x40e56265 in __cxa_throw () from /usr/lib/gcc/i686-pc-linux-gnu/4.1.1/libstdc++.so.6
#1  0x4008f1f6 in IceInternal::BasicStream::skipSlice () from /homes/jmoore/lib/ice/lib/libIce.so.32
#2  0x40094517 in IceInternal::BasicStream::read () from /homes/jmoore/lib/ice/lib/libIce.so.32
#3  0x408e7456 in omero::model::__read () from /homes/jmoore/1.1b3/build/32bit/lib/32bit/libOMERO_common.so.0
#4  0x408e82a8 in omero::model::Experimenter::__read () from /homes/jmoore/1.1b3/build/32bit/lib/32bit/libOMERO_common.so.0
#5  0x40094fab in IceInternal::BasicStream::read () from /homes/jmoore/lib/ice/lib/libIce.so.32
#6  0x400953e4 in IceInternal::BasicStream::readPendingObjects () from /homes/jmoore/lib/ice/lib/libIce.so.32
#7  0x40a8cd8e in IceDelegateM::omero::api::IUpdate::saveAndReturnObject () from /homes/jmoore/1.1b3/build/32bit/lib/32bit/libOMERO_common.so.0
#8  0x40a59bee in IceProxy::omero::api::IUpdate::saveAndReturnObject () from /homes/jmoore/1.1b3/build/32bit/lib/32bit/libOMERO_common.so.0
#9  0x0806d416 in IceProxy::omero::api::IUpdate::saveAndReturnObject (this=0x809b4c8, obj=@0xbfca59cc) at ../include/OMERO/API.h:1848
#10 0x08051a9b in main (argc=1, argv=0xbfca5f84) at SDK.cpp:261
or

Code:
 	    Exception:
 	    generated2/OMERO/Model/Experimenter.cpp:549: Ice::UnexpectedObjectException:
 	    unexpected class instance of type `::omero::model::ExperimenterGroup'; expected instance of type `::omero::model::Experimenter'
(From user. No backtrace)


I'm currently trying to produce a self-contained test that shows this behavior, but haven't yet succeeded. Our setup includes object factories (as shown in the exceptions) as well as Glacier2 (always run on the server machine).
Reply With Quote
  #2 (permalink)  
Old 05-16-2007
matthew's Avatar
matthew matthew is offline
ZeroC Staff
 
Name: Matthew Newhook
Organization: ZeroC, Inc.
Project: Internet Communications Engine
 
Join Date: Feb 2003
Location: NL, Canada
Posts: 1,055
Sorry, there are no known issues. In order to help you further we need more information. Ideally proving a self-contained example that demonstrates the issue would be the best way for us to help solve your problem.
Reply With Quote
  #3 (permalink)  
Old 05-23-2007
joshmoore joshmoore is offline
Registered User
 
Name: Josh Moore
Organization: Glencoe Software, Inc.
Project: OMERO, http://trac.openmicroscopy.org.uk/omero
 
Join Date: Feb 2007
Location: Germany
Posts: 59
Would it make sense for compiling with -fPIC (as in Make.rules.Linux) to solve the issue? (Because it is for the moment) And if so, is there a suggested list of flags for building shared libraries which use the Ice libraries?

Code:
    CXXFLAGS="-m64 -fPIC -D_REENTRANT..."
Thanks,
Josh.
Reply With Quote
  #4 (permalink)  
Old 05-23-2007
bernard's Avatar
bernard bernard is offline
ZeroC Staff
 
Name: Bernard Normier
Organization: ZeroC, Inc.
Project: Ice
 
Join Date: Feb 2003
Location: Palm Beach Gardens, FL
Posts: 813
Hi Josh,

-fPIC is required for shared libraries, but not other objects. "-m64 -fPIC -D_REENTRANT" sounds reasonable to build shared libraries on x86_64; shared libraries that use Ice don't require anything special.

What is the Slice definition of this omero::api::IUpdate::saveAndReturnObject operation?

Does this problem occur every time you call this operation? Are you sure the Slice definitions used by your client and server are the same?

Of course, the best would be to reduce your application to a small test case and post it on these forums.

Cheers,
Bernard
__________________
Bernard Normier
ZeroC, Inc.
Reply With Quote
  #5 (permalink)  
Old 05-23-2007
joshmoore joshmoore is offline
Registered User
 
Name: Josh Moore
Organization: Glencoe Software, Inc.
Project: OMERO, http://trac.openmicroscopy.org.uk/omero
 
Join Date: Feb 2007
Location: Germany
Posts: 59
The slice is fairly simple:
Code:
    interface IUpdate extends ServiceInterface
      { 
	void saveObject(omero::model::IObject obj) throws ServerError;
	void saveCollection(IObjectList objs) throws ServerError;     
	omero::model::IObject saveAndReturnObject(omero::model::IObject obj) throws ServerError;
	IObjectList saveAndReturnArray(IObjectList graph) throws ServerError;
	void deleteObject(omero::model::IObject row) throws ServerError;
      };
where IObject is the base class for all OMERO model objects:

Code:
module omero { 
  module model {     
    class IObject
    {
      omero::RLong          id;
      omero::model::Details details;
      bool loaded;
      void unload();
    };
  };
};
Things get more interesting here since omero::RLong is a concrete class, but we have convenience subclasses which get sliced, and due to the unload() method, all slice generated subclasses of IObject are abstract, which means we do a good deal of code generation ourselves, so I haven't been able to make a scaled down version which reproduces this issue.

Since it's working the moment, my assumption is that it was all a matter of the compilation flags. If the exceptions arise again, I'll post a reply.

Thanks for all the consideration,
Josh.
Reply With Quote
  #6 (permalink)  
Old 05-23-2007
bernard's Avatar
bernard bernard is offline
ZeroC Staff
 
Name: Bernard Normier
Organization: ZeroC, Inc.
Project: Ice
 
Join Date: Feb 2003
Location: Palm Beach Gardens, FL
Posts: 813
Hi Josh,

The most likely explanation for this error is a mismatch between the Slice definitions used by your client and server (the Slice definition for an IObject derived class).

In terms of reducing your application to a simple test case (if/when necessary), the first thing I'd remove is all the operations on your classes. This does not affect what goes on the wire but removes lots of code since all your mapped Slice classes would become concrete.

Best regards,
Bernard
__________________
Bernard Normier
ZeroC, Inc.
Reply With Quote
  #7 (permalink)  
Old 05-23-2007
joshmoore joshmoore is offline
Registered User
 
Name: Josh Moore
Organization: Glencoe Software, Inc.
Project: OMERO, http://trac.openmicroscopy.org.uk/omero
 
Join Date: Feb 2007
Location: Germany
Posts: 59
Agreed, Bernard. Unfortunately I'm nearly positive that it's not a slice mismatch since we've seen the effect both from clean check outs on two machines, as well as in our distribution given to clients (without slice to generate from).

If it's of interest, I'll proceed with a trivial example I was working on, and see if the fPIC/shared library combo will cause similar odd exceptions.

~J.
Reply With Quote
Reply



Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On

Similar Threads
Thread Thread Starter Forum Replies Last Post
Compiling Ice 3.2.0 with Intel C++ Compiler 9.1. (043) on Linux 2.6/64bit MichaelGauckler Patches 1 03-19-2007 03:18 PM
problems with AIX in 64bit mode peter.s Help Center 5 05-18-2006 06:05 PM
Boeing selects Ice for the Future Combat Systems Program marc Announcements 0 09-21-2004 05:58 PM
requirements issues mschulze Help Center 3 06-30-2004 11:39 AM
Ice for non-Intel systems (SPARC) fmccor Comments 15 03-07-2003 01:18 PM


All times are GMT -4. The time now is 07:49 PM.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.0.0
(c) 2008 ZeroC, Inc.