mirror of
https://github.com/MariaDB/server.git
synced 2025-01-15 19:42:28 +01:00
1c55b845e0
Added support to BACKUP STAGE to maria-backup This is a port of the code from ES 10.6 See MDEV-5336 for backup stages description. The following old options are not supported by the new code: --rsync ; This is because rsync will not work on tables that are in used. --no-backup-locks ; This is disabled as mariadb-backup will always use backup locks for better performance.
50 lines
1 KiB
C++
50 lines
1 KiB
C++
#include "thread_pool.h"
|
|
#include "common.h"
|
|
|
|
bool ThreadPool::start(size_t threads_count) {
|
|
if (!m_stopped)
|
|
return false;
|
|
m_stopped = false;
|
|
for (unsigned i = 0; i < threads_count; ++i)
|
|
m_threads.emplace_back(&ThreadPool::thread_func, this, i);
|
|
return true;
|
|
}
|
|
|
|
void ThreadPool::stop() {
|
|
if (m_stopped)
|
|
return;
|
|
m_stop = true;
|
|
m_cv.notify_all();
|
|
for (auto &t : m_threads)
|
|
t.join();
|
|
m_stopped = true;
|
|
};
|
|
|
|
void ThreadPool::push(ThreadPool::job_t &&j) {
|
|
std::unique_lock<std::mutex> lock(m_mutex);
|
|
m_jobs.push(j);
|
|
lock.unlock();
|
|
m_cv.notify_one();
|
|
}
|
|
|
|
void ThreadPool::thread_func(unsigned thread_num) {
|
|
if (my_thread_init())
|
|
die("Can't init mysql thread");
|
|
std::unique_lock<std::mutex> lock(m_mutex);
|
|
while(true) {
|
|
if (m_stop)
|
|
goto exit;
|
|
while (!m_jobs.empty()) {
|
|
if (m_stop)
|
|
goto exit;
|
|
job_t j = std::move(m_jobs.front());
|
|
m_jobs.pop();
|
|
lock.unlock();
|
|
j(thread_num);
|
|
lock.lock();
|
|
}
|
|
m_cv.wait(lock, [&] { return m_stop || !m_jobs.empty(); });
|
|
}
|
|
exit:
|
|
my_thread_end();
|
|
}
|