Ошибка подтверждения в dbus-c ++, завершает процесс - PullRequest
1 голос
/ 06 января 2012

Я использую привязку dbus-c ++ для создания прокси для API-интерфейса службы connman, который доступен на dbus. Метод, найденный в интерфейсе сервиса connman xml, выглядит так:

<method name="GetProperties">
<arg type="a{sv}" direction="out"/>
</method>

Файл прокси, который был автоматически сгенерирован с помощью утилиты "dbusxx-xml2cpp", создал рассматриваемый метод примерно так:

Line 1:    std::map< std::string, ::DBus::Variant > GetProperties()
Line 2:    {
Line 3:        ::DBus::CallMessage call;
Line 4:        call.member("GetProperties");
Line 5:        ::DBus::Message ret = invoke_method (call);
Line 6:        ::DBus::MessageIter ri = ret.reader();
Line 7:        std::map< std::string, ::DBus::Variant > argout;
Line 8:        ri >> argout;
Line 9:        return argout;
Line 10:    }

Это в строке 8, что я получаю предупреждение / ошибку, на x86 под управлением Ubuntu 11.04 с пакетом libdbus-c ++ - 1-0 (0 ~ 20110310-1ubuntu1):

process 30342: arguments to dbus_message_iter_open_container() were incorrect, assertion "(type == DBUS_TYPE_STRUCT && contained_signature == NULL) || (type == DBUS_TYPE_DICT_ENTRY && contained_signature == NULL) || (type == DBUS_TYPE_VARIANT && contained_signature != NULL) || (type == DBUS_TYPE_ARRAY && contained_signature != NULL)" failed in file dbus-message.c line 2677.
This is normally a bug in some application using the D-Bus library.
process 30342: dbus message iterator looks uninitialized or corrupted

.... и многое другое ..... Но процесс НЕ завершается / прервать здесь.

Однако, на бегу по цели, основанной на руке, процесс ПРЕКРАЩАЕТ после этой ошибки подтверждения!

Пакет, используемый в meego на игровой доске: libdbus-C ++ - 0.5.1-4.3.armv7hl.rpm
libdbus-c ++ - devel-0.5.1-4.3.armv7hl.rpm

Пожалуйста, помогите в решении этой проблемы. Есть ли другой способ, которым итератор может вставить значение DICT - (std :: map ), не выбрасывая эти ошибки утверждения?

Буду признателен за любую помощь.

-Рой Самуэль.

1 Ответ

2 голосов
/ 06 ноября 2012

Кажется, это ошибка в библиотеке dbus-c ++.Дополнительную информацию можно найти здесь:

http://sourceforge.net/tracker/?func=detail&aid=3151818&group_id=236997&atid=1101682

Я предлагаю вам либо:

  • изменить исходный код dbus-c ++ (изменить одну строку в сообщении.cpp)
  • использовать асинхронную версию sjames (здесь https://gitorious.org/~sjames/dbus-cplusplus/async)

С уважением,

Бигфут.

...