<html><head></head><body><div class="ydpd32ff82dyahoo-style-wrap" style="font-family: lucida console, sans-serif; font-size: 16px;"><div dir="ltr" data-setdir="false">Hi All,</div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false">I am pretty new to using dbus and wondering if someone could help on understanding why I see a seqfault.</div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false">I am trying to write a client wrapper to communicate to a module on the host. </div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false">I have generated the proxy header based on the interface of the host module. </div><div dir="ltr" data-setdir="false">And have a method to communicate to the particular host module.<br><br>When I try to use that method to send a message to the host module, I see the above coredump.<br><br>Backtrace does not display anything - looks like stack is all corrupted.</div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false">This is my host module:<br><div><div style="font-family: Menlo, Monaco, Consolas, Courier New, Courier, monospace; font-size: 14px; white-space: pre-wrap;"><pre>   @host_service.method(host_service.bus_name(MOD_NAME), in_signature='as', out_signature='is')
    def key_ctl(self, options):
        param = options[0]
        value = options[1]</pre></div></div><br><br>Busctl shows the following:<br><div><div style="font-family: Menlo, Monaco, Consolas, Courier New, Courier, monospace; font-size: 14px; white-space: pre-wrap;"><pre>root@sonic:~# busctl introspect org.SONiC.HostService.keyhandler  /org/SONiC/HostService/keyhandler
NAME                                TYPE      SIGNATURE RESULT/VALUE FLAGS
org.SONiC.HostService.keyhandler    interface -         -            -
.key_ctl                            method    as        is           -</pre></div></div><br><br>This is the proxy xml:<br><div><div style="font-family: Menlo, Monaco, Consolas, Courier New, Courier, monospace; font-size: 14px; white-space: pre-wrap;"><pre>  <interface name="org.SONiC.HostService.keyhandler">
      <method name="key_ctl">
          <arg direction="in"  type="as" name="data"/>                <!-- Must be a list of strings -->
          <arg direction="out" type="(is)" name="(success, output)"/> <!-- output -->
      </method>
  </interface></pre></div></div><br>My wrapper is as below:<br><div><div>static DBus::Connection  & get_dbusconn()</div><div>{</div><div>    static DBus::Connection  * conn_p = nullptr;</div><div>    if (conn_p == nullptr)</div><div>    {</div><div>        // DBus::BusDispatcher is a "main loop" construct that</div><div>        // handles (i.e. dispatched) DBus messages. This should</div><div>        // be defined as a singleton to avoid memory leaks.</div><div>        static DBus::BusDispatcher dispatcher;</div><div><br></div><div>        // DBus::default_dispatcher must be initialized before DBus::Connection.</div><div>        DBus::default_dispatcher = &dispatcher;</div><div><br></div><div>        static DBus::Connection conn = DBus::Connection::SystemBus();</div><div><br></div><div>        conn_p = &conn;</div><div>    }</div><div><br></div><div>    return *conn_p;</div><div>}</div><div><br></div></div><br><div><div>using namespace std;</div><div>extern "C" ::DBus::Struct<int, string>  HostQuery(const char *path_p, const char *val_p[]) {</div><div>    // tokenize module and action</div><div>    string s(path_p);</div><div>    stringstream ss(s);</div><div>    vector<string> tokens;</div><div>    string temp_str;</div><div><br></div><div>    while (getline(ss, temp_str, '.')) { //use . as delim for tokenizing string</div><div>       tokens.push_back(temp_str);</div><div>    }</div><div>    syslog(LOG_CRIT, "HostQuery - tokens[0] %s tokens[1] %s\n", tokens[0].c_str(), tokens[1].c_str());</div><div>    syslog(LOG_CRIT, "HostQuery - val_p[0] %s val_p[1] %s\n", val_p[0], val_p[1]);</div><div><br></div><div>    // get absolute paths with the module</div><div>    string name(DBUS_BUS_NAME_BASE);</div><div>    name += tokens[0];</div><div><br></div><div>    string path(DBUS_OBJ_PATH_BASE);</div><div>    path += tokens[0];</div><div>    syslog(LOG_CRIT, "HOstQuery - name %s path %s\n", name.c_str(), path.c_str());</div><div>    ::DBus::Struct<int/*success*/, std::string/*errmsg*/> ret;</div><div><br></div><div>    try {</div><div>        keyhandler_proxy_c host_client(get_dbusconn(), path.c_str(), name.c_str());</div><div><br></div><div>        //TODO: need to find how many elements are there in val_p.</div><div>        // for encrypt/decrypt, there may be only one element in it.</div><div>        // but for masterkey update, there could be two elements</div><div>        vector<string> vals = {"pwEncrypt","eventd"};</div><div><br></div><div>        //vector<string> vals;</div><div>        //string v1(val_p[0]);</div><div>        //string v2(val_p[1]);</div><div>        //vals.push_back(v1);</div><div>        //vals.push_back(v2);</div><div><br></div><div>        ret = host_client.key_ctl(vals);</div><div>    } catch (DBus::Error & ex) {</div><div>        syslog(LOG_CRIT, "hostquery - DBus Exception %s\n", ex.what());</div><div>        syslog(LOG_CRIT, "hostquery (path %s val_p[0] %s \n", path_p, val_p[0]);</div><div>    }</div><div><br></div><div>    return ret;</div><div>}</div><div><br></div></div><br><br><br>The log shows the following.<br><div><div>Sep 28 20:37:47.524196+00:00 2021 sonic CRIT eventd#eventd[22]: HostQuery - tokens[0] keyhandler tokens[1] key_ctl</div><div>Sep 28 20:37:47.526096+00:00 2021 sonic CRIT eventd#eventd[22]: HostQuery - val_p[0] pwEncrypt val_p[1] eventd</div><div>Sep 28 20:37:47.526096+00:00 2021 sonic CRIT eventd#eventd[22]: HOstQuery - name org.SONiC.HostService.keyhandler path /org/SONiC/HostService/keyhandler</div><div>Sep 28 20:37:47.540123+00:00 2021 sonic CRIT kernel: [16070.635164] eventd[29966]: segfault at 10 ip 00007fbb33028d4e sp 00007ffd8d3bf380 error 4 in libdbus-1.so.3.19.13[7fbb33027000+2e000]</div><div>Sep 28 20:37:47.540105+00:00 2021 sonic WARNING kernel: [16068.361437] IPv6: PREDAD not set IP6: 00000000000000000000000000000001/80 state: 00000001</div><div>Sep 28 20:37:47.540123+00:00 2021 sonic CRIT kernel: [16070.635164] eventd[29966]: segfault at 10 ip 00007fbb33028d4e sp 00007ffd8d3bf380 error 4 in libdbus-1.so.3.19.13[7fbb33027000+2e000]</div><div>Sep 28 20:37:47.560482+00:00 2021 sonic CRIT kernel: [16070.647419] Code: 04 00 66 90 ff 25 9a 32 04 00 66 90 ff 25 9a 32 04 00 66 90 ff 25 a2 32 04 00 66 90 48 8d 3d 11 eb 02 00 31 c0 e8 62 f5 ff ff <48> 8b 04 25 10 00 00 00 0f 0b e8 63 e4 ff ff 0f 1f 00 48 8d 3d 41</div><div>Sep 28 20:37:47.803046+00:00 2021 sonic CRIT systemd-coredump[29978]: Process 29966 (eventd) of user 0 dumped core.#012#012Stack trace of thread 22:#012#0  0x00007fbb33028d4e n/a (libdbus-1.so.3)#012#1  0x00007fbb32e08a77 _ZN4DBus11MessageIter7recurseEv (libdbus-c++-1.so.0)#012#2  0x00007fbb336261ac n/a (/usr/lib/x86_64-linux-gnu/libhostcomm.so.0.0.0)#012#3  0x00007ffd00600000 n/a (n/a)</div><div>Sep 28 20:37:50.856971+00:00 2021 sonic NOTICE eventd#eventd[23][16073.969937] eventd[30278]: segfault at 10 ip 00007f7b4ba01d4e sp 00007ffe3d7ba040 error 4 in libdbus-1.so.3.19.13[7f7b4ba00000+2e000]</div><div>: :- read_events[16073.982372] Code: 04 00 66 90 ff 25 9a 32 04 00 66 90 ff 25 9a 32 04 00 66 90 ff 25 a2 32 04 00 66 90 48 8d 3d 11 eb 02 00 31 c0 e8 62 f5 ff ff <48> 8b 04 25 10 00 00 00 0f 0b e8 63 e4 ff ff 0f 1f 00 48 8d 3d 41</div><div><br></div></div><br><br></div><div><br></div><div><br></div><div class="ydpd32ff82dsignature"><div style="font-family:sans-serif;font-size:16px;"><div style="font-family:sans-serif;font-size:16px;" dir="ltr"><span><span style="color:rgb(0, 0, 0);font-family:sans-serif;font-size:16px;">~~  Thanks, Srinadh</span></span><br></div><div style="font-family:sans-serif;font-size:16px;" dir="ltr"><br></div><div style="font-family:sans-serif;font-size:16px;"><div><br></div><div><br></div></div></div></div></div></body></html>