diff options
Diffstat (limited to 'common')
| -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); |
