forked from Alepha/Alepha
Make debugging for mailbox silent.
This commit is contained in:
@ -21,6 +21,13 @@ static_assert( __cplusplus > 2020'99 );
|
|||||||
|
|
||||||
namespace Alepha::Hydrogen::Atomic ::detail:: Mailbox_m
|
namespace Alepha::Hydrogen::Atomic ::detail:: Mailbox_m
|
||||||
{
|
{
|
||||||
|
namespace C
|
||||||
|
{
|
||||||
|
const bool debug= false;
|
||||||
|
const bool debugInterlock= false or C::debug;
|
||||||
|
const bool debugPop= false or C::debug;
|
||||||
|
}
|
||||||
|
|
||||||
inline namespace exports
|
inline namespace exports
|
||||||
{
|
{
|
||||||
template< typename > class Mailbox;
|
template< typename > class Mailbox;
|
||||||
@ -109,7 +116,7 @@ namespace Alepha::Hydrogen::Atomic ::detail:: Mailbox_m
|
|||||||
void
|
void
|
||||||
interlock( Lock &lock )
|
interlock( Lock &lock )
|
||||||
{
|
{
|
||||||
error() << "Interlock entered." << std::endl;
|
if( C::debugInterlock ) error() << "Interlock entered." << std::endl;
|
||||||
if( suspended ) awaken( lock );
|
if( suspended ) awaken( lock );
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -130,7 +137,10 @@ namespace Alepha::Hydrogen::Atomic ::detail:: Mailbox_m
|
|||||||
public:
|
public:
|
||||||
explicit inline
|
explicit inline
|
||||||
Mailbox( const size_t lim )
|
Mailbox( const size_t lim )
|
||||||
: boxLimit( lim ) {}
|
: boxLimit( lim )
|
||||||
|
{
|
||||||
|
assertion( pos == begin( filled ) );
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @todo Fix dox...
|
* @todo Fix dox...
|
||||||
@ -149,12 +159,13 @@ namespace Alepha::Hydrogen::Atomic ::detail:: Mailbox_m
|
|||||||
Item
|
Item
|
||||||
pop()
|
pop()
|
||||||
{
|
{
|
||||||
|
if( C::debugPop ) error() << "Pop called (" << (void *) this << ")." << std::endl;
|
||||||
if( pos == end( filled ) ) [[unlikely]]
|
if( pos == end( filled ) ) [[unlikely]]
|
||||||
{
|
{
|
||||||
error() << "We might have to hit the sync point." << std::endl;
|
if( C::debugPop ) error() << "We might have to hit the sync point." << std::endl;
|
||||||
if( mustFinish ) raiseFinished();
|
if( mustFinish ) raiseFinished();
|
||||||
Alepha::unique_lock lock( access );
|
Alepha::unique_lock lock( access );
|
||||||
error() << "We have to hit the sync point." << std::endl;
|
if( C::debugPop ) error() << "We have to hit the sync point." << std::endl;
|
||||||
interlock( lock );
|
interlock( lock );
|
||||||
if( finished )
|
if( finished )
|
||||||
{
|
{
|
||||||
@ -164,7 +175,7 @@ namespace Alepha::Hydrogen::Atomic ::detail:: Mailbox_m
|
|||||||
assertion( &*pos != nullptr );
|
assertion( &*pos != nullptr );
|
||||||
assertion( pos != end( filled ) );
|
assertion( pos != end( filled ) );
|
||||||
}
|
}
|
||||||
else error() << "We did not hit the sync point." << std::endl;
|
else if( C::debugPop ) error() << "We did not hit the sync point." << std::endl;
|
||||||
assertion( pos != end( filled ) );
|
assertion( pos != end( filled ) );
|
||||||
assertion( not filled.empty() );
|
assertion( not filled.empty() );
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user