Я работаю над устаревшим продуктом, который использует CORBA. Мы ищем поддержку omniiORB в качестве другого поставщика. Я столкнулся с одним из наших тестов с ошибкой сегмента, и я пытаюсь понять, что мы делали что-то не так, что случилось с другими поставщиками, или есть ошибка с omniiORB.
Я тестировал версию omniiORB, которая входит в Red Hat EPEL (4.2.0).
Я также скачал и собрал последнюю версию 4.2.3 и все еще видел ошибку.
Ниже приведен тестовый пример, который, как мне кажется, демонстрирует поведение, которое я вижу в нашем коде.
#include <omniORB4/CORBA.h>
//#include "typedefs.hh"
#include <iostream>
// only happens with string types.
// primitive CORBA types and user-defined types don't cause the error
int main() {
CORBA::Any any1;
any1 <<= "Hello";
CORBA::Any any2;
any2 = any1; // copy the any, seg fault in omniiorb
// any2 <<= any1; // any inside any, also seg faults
// CORBA::Any any2(any1); // copy constructor, also seg faults
return 0;
}
Я знаю, что извлечение в сгенерированный умный указатель вызывает проблемы, поскольку any должно оставаться владельцем.
Но в случае копирования Any, это не должно делать глубокую копию?
Что мне здесь не хватает?
У меня есть еще один короткий пример, который ближе к тому, что делает наш унаследованный код, который включает простой IDL, если этот пример считается непредставительным.
Суть того, что делает унаследованный код, заключается в копировании свойств, использующих для значения значение any, поэтому оно может быть любым. В прошлом мы не видели никаких проблем с Visibroker или ACE + TAO.