|
Back
Midas
Rome
Roody
Rootana
|
Midas DAQ System |
Not logged in |
|
|
16 Sep 2024, Marius Köppel, Bug Report, Crash using ODB watch
|
16 Sep 2024, Stefan Ritt, Bug Report, Crash using ODB watch
|
16 Sep 2024, Marius Koeppel, Bug Report, Crash using ODB watch
|
16 Sep 2024, Stefan Ritt, Bug Report, Crash using ODB watch
|
16 Sep 2024, Marius Koeppel, Bug Report, Crash using ODB watch
|
16 Sep 2024, Mark Grimes, Bug Report, Crash using ODB watch
|
17 Sep 2024, Konstantin Olchanski, Bug Report, Crash using ODB watch
|
18 Sep 2024, Marius Koeppel, Bug Report, Crash using ODB watch
|
20 Sep 2024, Stefan Ritt, Bug Report, Crash using ODB watch
|
|
Message ID: 2852
Entry time: 18 Sep 2024
In reply to: 2851
Reply to this: 2853
|
Author: |
Marius Koeppel |
Topic: |
Bug Report |
Subject: |
Crash using ODB watch |
|
|
I created a PR to fix this issue https://bitbucket.org/tmidas/midas/pull-requests/42.
The crash happened since the change in commit 3ad98c5 always got the ODB via XML.
However, the creation from XML should only be used when a user wants to read fast (and when we are on a remote machine) so I added the flag use_from_xml to explicitly specify this.
> > {
> > odb new_settings("/Equipment/Test FE/Settings");
> > new_settings.watch(watch); // <-- here I am getting a segmentation fault
> > }
>
> this code has a bug. "watch" is attached to object "new_settings" that is deleted
> after the closing curly bracket.
> I would say Stefan's odb API should not allow you to write code like this. an API defect.
As pointed out in the thread this feature is explicitly supported by odbxx.cxx:
void odb::watch(std::function<void(midas::odb &)> f) {
if (m_hKey == 0 || m_hKey == -1)
mthrow("watch() called for ODB key \"" + m_name +
"\" which is not connected to ODB");
// create a deep copy of current object in case it
// goes out of scope
midas::odb* ow = new midas::odb(*this);
ow->m_watch_callback = f;
db_watch(s_hDB, m_hKey, midas::odb::watch_callback, ow);
// put object into watchlist
g_watchlist.push_back(ow);
}
Also in the old way (see for example https://bitbucket.org/tmidas/midas/src/191d13f98626fae533cbca17b00df7ee361edf16/examples/crfe/crfe.cxx#lines-126) it was possible to create a watch in a scope without the user taking care that the "object" does not go out of scope.
I think this feature should be supported by the framework.
Best,
Marius |