mirror of
https://github.com/rakshasa/rtorrent.git
synced 2026-08-17 07:32:32 +00:00
* Fixed more redirected commands.
* Cleaned up the Command stack implementation. * Added framework for object_storage class that will hold variables and user-defined command lists. git-svn-id: svn://rakshasa.no/libtorrent/trunk/rtorrent@1162 e378c898-3ddf-0310-93e7-cc216c733640
This commit is contained in:
@@ -40,7 +40,10 @@
|
||||
#include "globals.h"
|
||||
#include "control.h"
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <unistd.h>
|
||||
#include <cassert>
|
||||
#include <rak/path.h>
|
||||
#include <torrent/exceptions.h>
|
||||
|
||||
#include "core/manager.h"
|
||||
@@ -67,6 +70,8 @@ ThreadWorker::set_scgi(rpc::SCgi* scgi) {
|
||||
if (!__sync_bool_compare_and_swap(&m_safe.scgi, NULL, scgi))
|
||||
return false;
|
||||
|
||||
change_xmlrpc_log();
|
||||
|
||||
// The xmlrpc process call requires a global lock.
|
||||
// m_safe.scgi->set_slot_process(rak::mem_fn(&rpc::xmlrpc, &rpc::XmlRpc::process));
|
||||
|
||||
@@ -77,6 +82,13 @@ ThreadWorker::set_scgi(rpc::SCgi* scgi) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
ThreadWorker::set_xmlrpc_log(const std::string& filename) {
|
||||
m_xmlrpcLog = filename;
|
||||
|
||||
queue_item((thread_base_func)&msg_change_xmlrpc_log);
|
||||
}
|
||||
|
||||
void
|
||||
ThreadWorker::start_scgi(ThreadBase* baseThread) {
|
||||
ThreadWorker* thread = (ThreadWorker*)baseThread;
|
||||
@@ -95,6 +107,38 @@ ThreadWorker::start_log_counter(ThreadBase* baseThread) {
|
||||
priority_queue_insert(&thread->m_taskScheduler, &thread->m_taskTouchLog, cachedTime);
|
||||
}
|
||||
|
||||
void
|
||||
ThreadWorker::msg_change_xmlrpc_log(ThreadBase* baseThread) {
|
||||
ThreadWorker* thread = (ThreadWorker*)baseThread;
|
||||
|
||||
acquire_global_lock();
|
||||
thread->change_xmlrpc_log();
|
||||
release_global_lock();
|
||||
}
|
||||
|
||||
void
|
||||
ThreadWorker::change_xmlrpc_log() {
|
||||
if (scgi() == NULL)
|
||||
return;
|
||||
|
||||
if (scgi()->log_fd() != -1)
|
||||
::close(scgi()->log_fd());
|
||||
|
||||
if (m_xmlrpcLog.empty()) {
|
||||
control->core()->push_log("Closed XMLRPC log.");
|
||||
return;
|
||||
}
|
||||
|
||||
scgi()->set_log_fd(open(rak::path_expand(m_xmlrpcLog).c_str(), O_WRONLY | O_APPEND | O_CREAT, 0644));
|
||||
|
||||
if (scgi()->log_fd() == -1) {
|
||||
control->core()->push_log_std("Could not open XMLRPC log file '" + m_xmlrpcLog + "'.");
|
||||
return;
|
||||
}
|
||||
|
||||
control->core()->push_log_std("Logging XMLRPC events to '" + m_xmlrpcLog + "'.");
|
||||
}
|
||||
|
||||
void
|
||||
ThreadWorker::task_touch_log() {
|
||||
priority_queue_insert(&m_taskScheduler, &m_taskTouchLog, cachedTime + rak::timer::from_seconds(1));
|
||||
|
||||
Reference in New Issue
Block a user