Bug 595653 - qpid c++ client library missing symbol `qpid::sys::Duration::Duration(qpid::sys::AbsTime&)'
qpid c++ client library missing symbol `qpid::sys::Duration::Duration(qpid::s...
Product: Red Hat Enterprise MRG
Classification: Red Hat
Component: qpid-cpp (Show other bugs)
All Linux
high Severity high
: 1.3
: ---
Assigned To: Andrew Stitcher
MRG Quality Engineering
Depends On:
Blocks: 595788
  Show dependency treegraph
Reported: 2010-05-25 05:55 EDT by Frantisek Reznicek
Modified: 2015-11-15 20:12 EST (History)
2 users (show)

See Also:
Fixed In Version:
Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
Last Closed: 2010-05-25 10:17:43 EDT
Type: ---
Regression: ---
Mount Type: ---
Documentation: ---
Verified Versions:
Category: ---
oVirt Team: ---
RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: ---

Attachments (Terms of Use)

  None (edit)
Description Frantisek Reznicek 2010-05-25 05:55:17 EDT
Description of problem:

There is recent change in qpid::sys::Duration::Duration() c++ client library which causes all c++ clients using qpid::sys::Duration::Duration(qpid::sys::AbsTime&) call to be not compilable:

[root@mrg-qe-07 c++]# g++ ${cli_fn}.cpp -Wall -O3 -ggdb -I/usr/include/qpid-boost     -lqpidclient -o ${cli_fn}
qc_tsxtest.cpp: In constructor `Opts::Opts()':
qc_tsxtest.cpp:114: warning: `Opts::events' will be initialized after
qc_tsxtest.cpp:107: warning:   `int Opts::rate'
qc_tsxtest.cpp:130: warning:   when initialized here
qc_tsxtest.cpp:113: warning: `Opts::depth' will be initialized after
qc_tsxtest.cpp:89: warning:   `bool Opts::run_now'
qc_tsxtest.cpp:130: warning:   when initialized here
qc_tsxtest.cpp:117: warning: `Opts::ring_d' will be initialized after
qc_tsxtest.cpp:115: warning:   `int Opts::symbol_queues'
qc_tsxtest.cpp:130: warning:   when initialized here
qc_tsxtest.cpp: In function `std::string timeStr(qpid::sys::AbsTime)':
qc_tsxtest.cpp:274: error: no matching function for call to `qpid::sys::Duration::Duration(qpid::sys::AbsTime&)'
/usr/include/qpid/sys/Time.h:115: note: candidates are: qpid::sys::Duration::Duration(const qpid::sys::Duration&)
/usr/include/qpid/sys/Time.h:123: note:                 qpid::sys::Duration::Duration(const qpid::sys::AbsTime&, const qpid::sys::AbsTime&)
/usr/include/qpid/sys/Time.h:136: note:                 qpid::sys::Duration::Duration(int64_t)
qc_tsxtest.cpp: In constructor `SMRStats::SMRStats()':
qc_tsxtest.cpp:699: warning: `SMRStats::end' will be initialized after
qc_tsxtest.cpp:696: warning:   `int64_t SMRStats::delay[3]'
qc_tsxtest.cpp:702: warning:   when initialized here
qc_tsxtest.cpp: In constructor `Smr::Smr()':
qc_tsxtest.cpp:757: warning: `Smr::expect' will be initialized after
qc_tsxtest.cpp:756: warning:   `int Smr::msg_cnt'
qc_tsxtest.cpp:760: warning:   when initialized here
qc_tsxtest.cpp: In constructor `Report::Report()':
qc_tsxtest.cpp:883: warning: `Report::expect' will be initialized after
qc_tsxtest.cpp:880: warning:   `int64_t Report::max_l'
qc_tsxtest.cpp:885: warning:   when initialized here
[root@mrg-qe-07 c++]# echo $?

It looks like 
qpid::sys::Duration::Duration(const qpid::sys::AbsTime&, 
                              const qpid::sys::AbsTime&)
candidate should have second parameter with default value like this:
qpid::sys::Duration::Duration(const qpid::sys::AbsTime&, 
                              const qpid::sys::AbsTime& = N)

Version-Release number of selected component (if applicable):

How reproducible:

Steps to Reproduce:
1. compile a client with qpid::sys::Duration::Duration(qpid::sys::AbsTime&) call
Actual results:
Client does not compile.

Expected results:
Client should compile fine.

Additional info:
Comment 1 Frantisek Reznicek 2010-05-25 05:57:39 EDT
This issue breaks ABI compatibility between releases.
Comment 2 Frantisek Reznicek 2010-05-25 06:06:40 EDT
It seems that 937147 commit introduced the issue:
Comment 3 Andrew Stitcher 2010-05-25 10:16:36 EDT
This removal was deliberate, and was not in the API/ABI poart of the library.

The timing classes are only exposed incidentally to clients.

The major reason for the removal is that the meaning of constructing a Duration from an AbsTime is ambiguous, and potentially different between platforms, as it was just exposing the underlying nanosecond count. You can only meaningfully construct a duration from the difference between two absolute times.

We've now added a constant AbsTime::EPOCH which corresponds to the absolute time at the Unix Epoch, so you can construct what you probably wanted all along.

If you've code like this then you need to replace it with something like:

Duration d(AbsTime::EPOCH, time);

Note You need to log in before you can comment on or make changes to this bug.