[omniORB] problems transferring a structure containing a string

Jakob Happach jakob_happach@yahoo.de
Mon Aug 19 08:33:00 2002


Hi @all,

I came across some problem, and I can't figure out why
this happens at all.
This problem occurs when I use omniorb 3.0.4 for
win32.
I use it on a Windows-2000-machine.
The client calls the Servants method and passes a
structure containing a string.
In the Interface Definition this argument is defined
as "in". (The Problem even occurs when the argument is
declared as "inout")
(When the structure contains only elements with 
static length like long
the problem does not occur).

The problem is that the Servant-Program crashes with
some completed_no exception sometimes.
While debugging the Servant I detected that the crash
occurs when the servants' ORB is trying to pass the
List of Arguments back to the clients' ORB.

Running the Client on the same machine also has the
effect that after this exception happens further calls
to the Servant proceed. (switching -ORBtracelevel 19
causes the Servant ORB to tell everytime that
something
weird happened).

I'm not sure at all if this has something to do with
the omniorb which I downloaded directly from the web
(didn't compile it on my platform, I use the dlls
which were enclosed).

Using a similar Interface with a Java ORB for a
Servant
does not show this problem.

I append the IDL-File which shows the simplest example
I could use to show the problem and also a Debug-Trace
with the above mentioned tracelevel.

Thanks very uch in advance,
Servus,
Jakob Happach

------------------IDL-----------------------
>>
module idldrei
{
	struct structdatentyp
	{
		string info;
	};

	typedef  structdatentyp datentyp;

	interface IDatensenke
	{
		long recvdata(in datentyp data);
	};
};
<<
--------------------ORB-Trace-Servant--------------
(3 Client calls, implementation does the recvdata>>
print)
>>
[c:\ddf0xa\win32\idltestfabrik\idldrei\minidebugdatasinkfueridldrei\release]Mini
DebugDatasink.exe -ORBtraceLevel 19
omniORB: The omniDynamic library is not linked.
omniORB: strand Ripper: start.
omniORB: scavenger : start.
omniORB: Initialising incoming rope factories.
omniORB: Starting incoming rope factories.
omniORB: Activating: root<0>
omniORB: Creating ref to local: root<0>
 target id      : IDL:idldrei/IDatensenke:1.0
 most derived id: IDL:idldrei/IDatensenke:1.0
idldreidatensenke>>
IOR:010000001c00000049444c3a69646c647265692f49446174656e7365
6e6b653a312e3000010000000000000026000000010100000a00000038392e322e372e3133003404
0e000000fe879c603d000005340000000000
omniORB: tcpSocketMTfactory Rendezvouser: start.
omniORB: tcpSocketMTfactory Rendezvouser: block on
accept()
omniORB: scavenger : scanning connections
omniORB: scavenger : scanning connections
omniORB: scavenger : scanning connections
omniORB: scavenger : scanning connections
omniORB: scavenger : scanning connections
omniORB: tcpSocketMTfactory Rendezvouser: unblock from
accept()
omniORB: tcpSocketMTfactory Rendezvouser: accept new
strand.
omniORB: tcpSocketMTfactory Rendezvouser: block on
accept()
omniORB: tcpSocketMTfactory Worker: start.
omniORB: Handling a GIOP LOCATE_REQUEST.
recvdata>> 983298
omniORB: throw omniConnectionBroken (minor 10054) from
tcpSocketMTfactory.cc:106
8
omniORB: tcpSocketMTfactory Worker: #### Connection
closed.
omniORB: tcpSocketMTfactory Worker: exit.
omniORB: tcpSocketStrand::~Strand() close socket no.
484
omniORB: scavenger : scanning connections
omniORB: scavenger : scanning connections
omniORB: tcpSocketMTfactory Rendezvouser: unblock from
accept()
omniORB: tcpSocketMTfactory Rendezvouser: accept new
strand.
omniORB: tcpSocketMTfactory Rendezvouser: block on
accept()
omniORB: tcpSocketMTfactory Worker: start.
omniORB: Handling a GIOP LOCATE_REQUEST.
recvdata>> 983298
omniORB: WARNING -- method 'recvdata' raised an
unexpected
 exception (not a CORBA exception).
omniORB: An exception has occured and was caught by
tcpSocketMT Worker thread.
omniORB: tcpSocketMTfactory Worker: exit.
omniORB: scavenger : scanning connections
omniORB: tcpSocketMTfactory Rendezvouser: unblock from
accept()
omniORB: tcpSocketMTfactory Rendezvouser: accept new
strand.
omniORB: tcpSocketMTfactory Rendezvouser: block on
accept()
omniORB: tcpSocketMTfactory Worker: start.
omniORB: Handling a GIOP LOCATE_REQUEST.
recvdata>> 983298
omniORB: throw omniConnectionBroken (minor 10054) from
tcpSocketMTfactory.cc:106
8
omniORB: tcpSocketMTfactory Worker: #### Connection
closed.
omniORB: tcpSocketMTfactory Worker: exit.
omniORB: tcpSocketStrand::~Strand() close socket no.
484
omniORB: scavenger : scanning connections
omniORB: scavenger : scanning connections
omniORB: scavenger : scanning connections
<<
 

__________________________________________________________________

Gesendet von Yahoo! Mail - http://mail.yahoo.de
Möchten Sie mit einem Gruß antworten? http://grusskarten.yahoo.de