blob: 9bc83d5a2014de313f13826818fc2fe0909168b7 (
plain)
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
40
41
|
// Copyright (c) 2010 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/sync/glue/database_model_worker.h"
#include "base/waitable_event.h"
#include "chrome/browser/browser_thread.h"
using base::WaitableEvent;
namespace browser_sync {
void DatabaseModelWorker::DoWorkAndWaitUntilDone(Callback0::Type* work) {
if (BrowserThread::CurrentlyOn(BrowserThread::DB)) {
DLOG(WARNING) << "DoWorkAndWaitUntilDone called from the DB thread.";
work->Run();
return;
}
WaitableEvent done(false, false);
if (!BrowserThread::PostTask(BrowserThread::DB, FROM_HERE,
NewRunnableMethod(this, &DatabaseModelWorker::CallDoWorkAndSignalTask,
work, &done))) {
NOTREACHED() << "Failed to post task to the db thread.";
return;
}
done.Wait();
}
void DatabaseModelWorker::CallDoWorkAndSignalTask(Callback0::Type* work,
WaitableEvent* done) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::DB));
work->Run();
done->Signal();
}
bool DatabaseModelWorker::CurrentThreadIsWorkThread() {
return BrowserThread::CurrentlyOn(BrowserThread::DB);
}
} // namespace browser_sync
|