Thanks Stefan, you've been extremely helpful so far. I mitigated the second
issue in my last post as well, I was doing some incorrect initialization in
one of my subclasses (I believe I was forgetting to call
eq::Node::configInit() in my subclass).

And of course I've come across another issue (which I actually managed to
solve but I figured I should bring it up). I'm following the eqPly paradigm
of having a FrameData object derive from eq::fabric::Serializable. The
implementation that I have is barebones (a eq::Matrix4f + eq::Vector3f for
camera position and serialize/deserialize functions for these things). 

The issue that I was running into is an access violation when launching my
client, before it even hits main(). I believe it is during the
initialization of some globals used by Fabric.

I'm copy pasting the disassembly (the last line is the one that throws the
EXC_BAD_ACCESS).



> 0x0002dfd0  <+0000>  push   %ebp
> 0x0002dfd1  <+0001>  mov    %esp,%ebp
> 0x0002dfd3  <+0003>  push   %edi
> 0x0002dfd4  <+0004>  push   %esi
> 0x0002dfd5  <+0005>  sub    $0x10,%esp
> 0x0002dfd8  <+0008>  call   0x2dfdd
> <_GLOBAL__I__ZN2eq6fabric13RenderContextC2Ev+13>
> 0x0002dfdd  <+0013>  pop    %esi
> 0x0002dfde  <+0014>  lea    0xea33b(%esi),%eax
> 0x0002dfe4  <+0020>  mov    %eax,(%esp)
> 0x0002dfe7  <+0023>  call   0xd9978 <dyld_stub__ZNSt8ios_base4InitC1Ev>
> 0x0002dfec  <+0028>  mov    0xe617b(%esi),%edi
> 0x0002dff2  <+0034>  mov    %edi,0x8(%esp)
> 0x0002dff6  <+0038>  lea    -0x36d(%esi),%ecx
> 0x0002dffc  <+0044>  mov    %ecx,(%esp)
> 0x0002dfff  <+0047>  movl   $0x0,0x4(%esp)
> 0x0002e007  <+0055>  call   0xd9a2c <dyld_stub___cxa_atexit>
> 0x0002e00c  <+0060>  mov    0xe61a7(%esi),%eax
> 0x0002e012  <+0066>  cmpb   $0x0,(%eax)
> 0x0002e015  <+0069>  jne    0x2e063
> <_GLOBAL__I__ZN2eq6fabric13RenderContextC2Ev+147>
> 0x0002e017  <+0071>  movb   $0x1,(%eax)
> 0x0002e01a  <+0074>  mov    0xe615f(%esi),%eax
> 0x0002e020  <+0080>  movl   $0xbf800000,(%eax)
> 0x0002e026  <+0086>  movl   $0x3f800000,0x4(%eax)
> 0x0002e02d  <+0093>  movl   $0xbf800000,0x8(%eax)
> 0x0002e034  <+0100>  movl   $0x3f800000,0xc(%eax)
> 0x0002e03b  <+0107>  movl   $0x3dcccccd,0x10(%eax)
> 0x0002e042  <+0114>  movl   $0x42c80000,0x14(%eax)
> 0x0002e049  <+0121>  mov    %edi,0x8(%esp)
> 0x0002e04d  <+0125>  lea    -0x37d(%esi),%ecx
> 0x0002e053  <+0131>  mov    %ecx,(%esp)
> 0x0002e056  <+0134>  movl   $0x0,0x4(%esp)
> 0x0002e05e  <+0142>  call   0xd9a2c <dyld_stub___cxa_atexit>
> 0x0002e063  <+0147>  mov    0xe619b(%esi),%eax
> 0x0002e069  <+0153>  cmpb   $0x0,(%eax)
> 0x0002e06c  <+0156>  jne    0x2e0a5
> <_GLOBAL__I__ZN2eq6fabric13RenderContextC2Ev+213>
> 0x0002e06e  <+0158>  movb   $0x1,(%eax)
> 0x0002e071  <+0161>  pxor   %xmm0,%xmm0
> 0x0002e075  <+0165>  mov    0xe61ab(%esi),%eax
> 0x0002e07b  <+0171>  movaps %xmm0,0x30(%eax)
> 

The issue stemmed from me using the eq::vector3f::ZERO in ANY place in my
code (for instance as an argument to a ctor of eq::vector3f or by doing an
assignment operation to an eq::vector3f) without actually having a normal
eq::vector3f() constructor invoked before. I THINK that this is because
eq::vector3f::ZERO is defined as a static and, without invoking any other
eq::vector3f functions before that, the respective part the library doesn't
get loaded or something, thus referring to eq::vector3f::ZERO results in
everything blowing up....

This is a wild guess but I wanted to confirm...

--
View this message in context: 
http://software.1713.n2.nabble.com/Access-violation-in-co-Connection-recvSync-tp7073993p7076039.html
Sent from the Equalizer - Parallel Rendering mailing list archive at Nabble.com.

_______________________________________________
eq-dev mailing list
[email protected]
http://www.equalizergraphics.com/cgi-bin/mailman/listinfo/eq-dev
http://www.equalizergraphics.com

Reply via email to