You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by Erik Frey <er...@last.fm> on 2008/11/26 18:59:23 UTC
bad assert() in Monitor.cpp
I just had a very long night because of line 69 in
lib/cpp/src/concurrency/Monitor.cpp:
assert(Util::currentTime() >= (now + timeout));
There are a couple of problems with this and I thought I'd check here
before submitting a jira:
* Release version of thrift library isn't being compiled with -DNDEBUG
* On certain kernels, waiting with a very long timeout (e.g. many
minutes or hours) returns just -before- the expected time, hitting the
assert and abruptly bringing down the whole process. May be a timer
resolution issue, not sure.
What do you guys suggest? Whether -DNDEBUG is used or not, I'm not sure
thrift release is an appropriate place to unit test pthreads.
Erik
RE: bad assert() in Monitor.cpp
Posted by Mark Slee <ms...@facebook.com>.
I remember this specific issue coming up before (i.e. the pthread library doesn't strictly obey timeouts and may actually return early) -- though I can't remember exactly what we did to address it. It may have only come up internally at Facebook...
Aside from turning off -DNDEBUG I might recommend actually commenting out this assert statement and placing a comment next to it explaining that the underlying thread implementation doesn't actually properly support these semantics. If possible we should #ifdef the assert() for just the platforms where we know the timeout handling to be an issue -- generally a failure of this assert() could represent a major problem.
-----Original Message-----
From: Erik Frey [mailto:erikf@last.fm]
Sent: Wednesday, November 26, 2008 9:59 AM
To: thrift-dev@incubator.apache.org
Subject: bad assert() in Monitor.cpp
I just had a very long night because of line 69 in
lib/cpp/src/concurrency/Monitor.cpp:
assert(Util::currentTime() >= (now + timeout));
There are a couple of problems with this and I thought I'd check here before submitting a jira:
* Release version of thrift library isn't being compiled with -DNDEBUG
* On certain kernels, waiting with a very long timeout (e.g. many minutes or hours) returns just -before- the expected time, hitting the assert and abruptly bringing down the whole process. May be a timer resolution issue, not sure.
What do you guys suggest? Whether -DNDEBUG is used or not, I'm not sure thrift release is an appropriate place to unit test pthreads.
Erik