[omniORB] omniORB hangs with some requests
kleva
kleva at proc.ru
Wed Jun 1 21:29:12 BST 2005
Hi,
I'v got Win2000(SP4) + omniORB 4.0.6 + VC7++. Im writing just CORBA client
wich communicates with CORBA server (build in in hardware device).
Basicly it works fine, but there is one big trouble:
Some interfaces are inaccessible:
My server exports 5 idl files. 4 of them forks fine, but one hangs
the PC.
My code looks like:
/////////////////////////////////////////////////////////////////////////////
CORBA::Object_var mgrObj = g_orb->string_to_object(
"corbaloc::127.0.0.1:19760/LTrakPOA/ConfigsServer");
configs_var conf = configs::_narrow(mgrObj); // GIOP message is sending
conf->clearActions(true); // Processor is 100% busy and GIOP is NOT sending!
/////////////////////////////////////////////////////////////////////////////
While communicating with CORBA server I'm using proxy server - so I
can trace all GIOP requests. With other interfaces everything is
fine!
Why it can be so?
IDL file wich is not working:
//////////////////
// IO Interface Definition
//
// Copyright (c) 2000 - 2003 Nokia Mobile Phones
//
module IOModule
{
typedef short PinNumber; // Pin number.
typedef long PinValue; // For digital pins, 0 = false.
typedef short Interval; // Interval in seconds.
typedef sequence<PinNumber> PinNumberList;
typedef sequence<PinValue> PinValueList;
interface IOControlObserver;
exception PinNumberOutOfRange { };
exception PinValueOutOfRange { };
exception InvalidPinMode { };
exception PeriodOutOfRange { };
exception LowLimitOutOfRange { };
exception HighLimitOutOfRange { };
exception ListsNotEven { };
exception ObserverNotExists { };
// first = first member in sequence that caused the exception.
exception PinNumberOutOfRangeList{ long first; };
exception PinValueOutOfRangeList{ long first; };
exception InvalidPinModeList{ long first; };
enum PinMode {
DIGITAL,
ANALOG,
ANALOG_ALARMING,
ANALOG_PERIODICAL
};
struct AnalogAlarmLimits {
PinValue lowLimit;
PinValue highLimit;
Interval period;
};
interface IOControl {
readonly attribute long numberOfInputPins;
readonly attribute long numberOfOutputPins;
PinMode getInputPinMode( in PinNumber m_pinNumber )
raises ( PinNumberOutOfRange );
AnalogAlarmLimits getInputPinAlarmLimits( in PinNumber m_pinNumber )
raises ( PinNumberOutOfRange, InvalidPinMode);
Interval getInputPinAlarmPeriod( in PinNumber m_pinNumber )
raises ( PinNumberOutOfRange, InvalidPinMode);
void setInputPinModeDigital( in PinNumber m_pinNumber )
raises ( PinNumberOutOfRange, InvalidPinMode );
void setInputPinModeAnalog( in PinNumber m_pinNumber )
raises ( PinNumberOutOfRange, InvalidPinMode );
void setInputPinModeAlarming( in PinNumber m_pinNumber, in AnalogAlarmLimits limits )
raises ( PinNumberOutOfRange, InvalidPinMode, PeriodOutOfRange,
HighLimitOutOfRange, LowLimitOutOfRange );
void setInputPinModePeriodical( in PinNumber m_pinNumber, in Interval m_interval )
raises ( PinNumberOutOfRange, InvalidPinMode, PeriodOutOfRange );
PinValue getInputPinValue( in PinNumber m_pinNumber )
raises ( PinNumberOutOfRange );
PinValueList getInputPinValueList( in PinNumberList pinNumbers)
raises ( PinNumberOutOfRangeList );
void setOutputPinValue( in PinNumber m_pinNumber, in PinValue value )
raises ( PinNumberOutOfRange, PinValueOutOfRange );
void setOutputPinValueList( in PinNumberList pinNumbers, in PinValueList values )
raises ( PinNumberOutOfRangeList, PinValueOutOfRangeList, ListsNotEven );
PinValue getOutputPinValue( in PinNumber m_pinNumber )
raises ( PinNumberOutOfRange );
PinValueList getOutputPinValueList( in PinNumberList pinNumbers )
raises ( PinNumberOutOfRangeList );
void setIOControlObserver( in IOControlObserver observer, in PinNumberList pinNumbers )
raises( PinNumberOutOfRangeList );
void removeIOControlObserver( in IOControlObserver observer, in PinNumberList pinNumbers )
raises ( ObserverNotExists, PinNumberOutOfRangeList );
};
interface IOControlObserver {
void pinStateChanged( in PinNumber m_pinNumber, in PinValue value );
};
};
More information about the omniORB-list
mailing list