1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
#include "util/sync_task.h"
#include <glog/logging.h>
using cert_trans::Notification;
using std::bind;
namespace util {
SyncTask::SyncTask(Executor* executor)
: task_(bind(&Notification::Notify, ¬ifier_), CHECK_NOTNULL(executor)) {
}
SyncTask::~SyncTask() {
CHECK(IsDone());
}
bool SyncTask::IsDone() const {
// We should not use task_.IsDone(), because it becomes true before
// the callback is called, and a user could then decide to delete
// the SyncTask, which could cause a crash.
return notifier_.HasBeenNotified();
}
void SyncTask::Wait() const {
notifier_.WaitForNotification();
}
void SyncTask::Cancel() {
task_.Cancel();
}
} // namespace util
|