I have a Windows client (Vista) that registers a number of callback
objects with a Linux server in the way described in the book 'Advanced
CORBA Programming with C++' (Chapter 20):-
module CCS {
struct CallbackInfo {
:
:
};
interface Callback {
void notify(in any data);
};
interface CBRegistration {
void unregister();
};
interface xxx {
CBRegistration register_callback(
in Callback cb;
in CallbackInfo why;
);
};
};
When the server makes a callback, this sometimes works ok but other
times it fails with an OBJECT_NOT_EXIST exception.
After one failure, it appears that the other registered callbacks also
fail in the same way.
When the Windows client subsequently exits, it still manages to
successfully call the server to unregister the callbacks. It does this
by calling the unregister() method for each of the callback objects in
turn. This proves that the callback objects still exist on the client
and have not been inadvertently destroyed.
When I use a test client running on the same Linux machine as the
server, I don't see the problem.
I have added debug to log the exception minor code (using e.minor() )
- this is set to zero.
I have added a few retries with a delay between each but all the retry
attempts fail in the same way.
I have tried changing some configuration parameters such as
verifyObjectExistsAndType, lcdMode, strictIIOP.
We are using omniORB 4.0.7.
Linux server is running under Kubuntu 7.10.
Any help greatly appreciated.
Regards,
Brian.