diff options
| author | Manuel Traut <manut@mecka.net> | 2012-06-08 01:21:44 +0200 |
|---|---|---|
| committer | Manuel Traut <manut@mecka.net> | 2012-06-08 01:21:44 +0200 |
| commit | 47074177e4d6675918684fad34a6b5fe39c380e7 (patch) | |
| tree | aa687d822069ea5043c6d1da0cfea77f1ff4b073 | |
| parent | 1a3ca3c5dbcb261658139110d51c3e2fb7b01146 (diff) | |
libdistrio_common: make lookups by name more robust
- check for corba exceptions
Signed-off-by: Manuel Traut <manut@mecka.net>
| -rw-r--r-- | common/distrio_helper.cpp | 30 | ||||
| -rw-r--r-- | common/distrio_helper.h | 2 |
2 files changed, 26 insertions, 6 deletions
diff --git a/common/distrio_helper.cpp b/common/distrio_helper.cpp index 1efa79f..fa55d4c 100644 --- a/common/distrio_helper.cpp +++ b/common/distrio_helper.cpp @@ -87,6 +87,16 @@ int run_orb () return 0; } +int join_orb () +{ + if (ref.init != ORB_RUNNING) { + std::cerr << "corba orb not running" << std::endl; + return -1; + } + + return pthread_join (orb_thread, NULL); +} + int register_digital (Distrio_Digital_i *digital) { CosNaming::Name name; @@ -260,9 +270,13 @@ void lookup_analog (std::string _name, Distrio::Analog_list_var ana_list, ::CORBA::String_var name; Distrio::Error *e; - e = ana_list[i]->name (name); - free (e); - + try { + e = ana_list[i]->name (name); + if (!::CORBA::is_nil (e)) + free (e); + } catch (::CORBA::Exception &ex) { + std::cerr << "get name of analog io failed\n" << ex << std::cerr; + } if (! _name.compare (name.in ())) { *ptr = ana_list[i]; return; @@ -281,9 +295,13 @@ void lookup_digital (std::string _name, Distrio::Digital_list_var dig_list, ::CORBA::String_var name; Distrio::Error *e; - e = dig_list[i]->name (name); - free (e); - + try { + e = dig_list[i]->name (name); + if (!::CORBA::is_nil (e)) + free (e); + } catch (::CORBA::Exception &ex) { + std::cerr << "get name of digital io failed\n" << ex << std::cerr; + } if (! _name.compare (name.in ())) { *ptr = dig_list[i]; return; diff --git a/common/distrio_helper.h b/common/distrio_helper.h index 0a571db..f0ad95c 100644 --- a/common/distrio_helper.h +++ b/common/distrio_helper.h @@ -43,6 +43,8 @@ static corba_ref ref = { int init_corba (int argc, char **argv); /** run the orb - function starts orb in new thread and returns */ int run_orb (void); +/** join the orb - function blocks until orb is shutdown */ +int join_orb (void); /** register a digital io with a common name at the naming service */ int register_digital (Distrio_Digital_i *digital); |
