Opened 9 years ago

Closed 9 years ago

#9602 closed Bugs (fixed)

Unexpected ABI change in boost::interprocess::rbtree_best_fit

Reported by: kevin.arunski@… Owned by: Ion Gaztañaga
Milestone: To Be Determined Component: intrusive
Version: Boost 1.55.0 Severity: Regression
Keywords: Cc:

Description

Copied from the boost-users mailing list. This is in relation to the change in the binary representation of boost::interprocess::rbtree_best_fit between boost 1.53 and boost 1.55.

This problem was observed in MSVC 2012 x86-64 builds.

El 22/01/2014 22:06, Arunski, Kevin escribió:

boost::interprocess::rbtree_best_fit<boost::interprocess::null_mutex_family,boost::interprocess::offset_ptr<void,__int64,unsigned __int64,0>,0>

has size = 56 member m_header.m_imultiset has size 32

In code compiled with boost 1.55:

the same type has size = 72 member m_header.m_imultiset has size 48

Wow, that's too big. I think this is related with MSVC Empty Base Implementation behaviour. I refactored those classes to avoid redundant simple forwarding functions using inheritance and that broke this for MSVC compilers. I should add some checks for 32 and 64 bit compilers to guarantee the minimum size (16 bytes in 32 bit and 32 bytes in 64 bit). Please, fill a new ticket in Boost Trac so that I don't forget this bug. And thanks for the report. Ion

Change History (4)

comment:1 by Ion Gaztañaga, 9 years ago

Component: interprocessintrusive

Assigned to Intrusive.

It was much harder to fix that I originally thought. I've committed changeset 2ffe6b2f8298d485b60b6d8eb4feb8111d6ff488 in Boost.Intrusive. Please let me know if this fixes the problem.

comment:2 by kevin.arunski@…, 9 years ago

Thanks, I will test ASAP.

comment:3 by anonymous, 9 years ago

Confirmed that change set 2ffe6b2f8298d485b60b6d8eb4feb8111d6ff488 fixes the issue.

comment:4 by Ion Gaztañaga, 9 years ago

Resolution: fixed
Status: newclosed

Thanks for the report, closing the issue.

Note: See TracTickets for help on using tickets.