[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