[bind10-dev] failed build master bef01123fb5dfaee927bc58da465109240811a18

JINMEI Tatuya / 神明達哉 jinmei at isc.org
Thu Jan 3 02:51:46 UTC 2013


At Tue, 1 Jan 2013 11:53:20 +0530,
Mukund Sivaraman <muks at isc.org> wrote:

> > of it for MaybeRRTTL, I guess an easy workaround is to convert it to
> > RRClass explicitly and then use operator!=.
> > 
> >         const MaybeRRClass maybe_rrclass =
> >             RRClass::createFromText(rrparam_token.getString());
> >         if (maybe_rrclass) {
> >             // comment here about making an explicit copy
> >             const RRClass rrclass(*maybe_rrclass);
> >             if (rrclass != zone_class_) {
> 
> This did not work, returning the same error at the dereference.

Yeah I reproduced it on that buildbot box.

> However I just used the latest release of boost on that Debian i686
> machine and it compiles properly with it. I think the best thing to do
> would be to switch to a newer version of boost on that particular
> builder.

This might be the way in the end, but I have a few concerns with this
approach:
- It's very changeneering.  In particular, I'm not really happy with
  forgetting it without understanding why it fails with RRClass but
  not with RRTTL.
- If it only works with very recent versions of Boost, it may not work
  for some others that have this version of g++ and a bit older
  versions of Boost.

So, I suggest creating a followup ticket for the next sprint, where we do:

- Figure out the detailed reason why it fails specifically with
  RRClass.
- Identify the oldest version of Boost that makes it build.
- If it's reasonably old, update configure.ac to detect the issue and
  suggest upgrading Boost to that version
- Depending on the result of the first point, think about workaround
  in our side.  Depending on the feasibility of it, we might be able
  to avoid requesting upgrading Boost.

In the meantime, I suggest applying the following patch:

--- a/src/lib/dns/master_loader.cc
+++ b/src/lib/dns/master_loader.cc
@@ -222,7 +222,7 @@ private:
         const MaybeRRClass rrclass =
             RRClass::createFromText(rrparam_token.getString());
         if (rrclass) {
-            if (*rrclass != zone_class_) {
+            if (RRClass(rrparam_token.getString()) != zone_class_) {
                 isc_throw(InternalException, "Class mismatch: " << *rrclass <<
                           " vs. " << zone_class_);
             }

It's redundant, but works correctly, and compiles on that particular
environment.

---
JINMEI, Tatuya


More information about the bind10-dev mailing list