Compare commits

..

9 Commits

Author SHA1 Message Date
rakshasa ee64f8ea50 Merge branch 'master' into feature/ipc-worker 2026-08-09 13:13:20 +02:00
rakshasa bf1265d954 Stuff. 2026-08-09 10:44:29 +02:00
rakshasa 6c3c77a2b7 Stuff. 2026-08-07 11:58:33 +02:00
rakshasa 120fcb0273 Merge branch 'master' into feature/ipc-worker 2026-08-06 11:03:44 +02:00
rakshasa c36956813d Merge branch 'master' into feature/ipc-worker 2026-08-04 18:00:04 +02:00
rakshasa 05563b4c9b Stuff. 2026-07-28 10:56:25 +02:00
rakshasa a544f8ad68 Merge branch 'master' into feature/ipc-worker 2026-07-28 10:33:57 +02:00
rakshasa b35413ea71 Merge branch 'master' into feature/ipc-worker 2026-07-26 13:03:33 +02:00
rakshasa f9f19fb041 Stuff. 2026-07-26 09:14:39 +02:00
7 changed files with 21 additions and 19 deletions
+1 -2
View File
@@ -11,8 +11,7 @@ namespace input {
void void
InputEvent::insert() { InputEvent::insert() {
torrent::this_thread::poll()->open(this); torrent::this_thread::poll()->open_and_insert_read(this);
torrent::this_thread::poll()->insert_read(this);
} }
void void
+9 -8
View File
@@ -112,8 +112,9 @@ main(int argc, char** argv) {
torrent::log_initialize(); torrent::log_initialize();
// TODO: Create a fake thread object for initializing other processes and enabling logging. torrent::runtime::initialize_worker_process_and_main_thread([argc, argv]() {
torrent::initialize_main_thread(); parse_config_file(argc, argv, [](auto& path) { parse_config_file_comments("worker", path); });
});
// Block SIGCHLD until all threads are created, then unblock on main-thread, to avoid SIGCHLD // Block SIGCHLD until all threads are created, then unblock on main-thread, to avoid SIGCHLD
// interrupting other threads. // interrupting other threads.
@@ -136,12 +137,10 @@ main(int argc, char** argv) {
// # do:log.open_file=system,/usr/rakshasa/system.log // # do:log.open_file=system,/usr/rakshasa/system.log
// # do:log.add_output=system,system // # do:log.add_output=system,system
// //
parse_config_file(argc, argv, [](auto& path) { // # do-worker:log.open_file=system,/usr/rakshasa/system-worker.log
if (path.empty()) // # do-worker:log.add_output=system,system
return; //
parse_config_file(argc, argv, [](auto& path) { parse_config_file_comments("", path); });
parse_config_file_comments(path);
});
control = new Control; control = new Control;
@@ -164,6 +163,8 @@ main(int argc, char** argv) {
torrent::initialize(); torrent::initialize();
torrent::main_thread::set_client_callback(&client_perform); torrent::main_thread::set_client_callback(&client_perform);
torrent::runtime::initialize_worker_process();
scgi::ThreadScgi::create_thread(); scgi::ThreadScgi::create_thread();
session::ThreadSession::create_thread(); session::ThreadSession::create_thread();
+1 -1
View File
@@ -108,6 +108,6 @@ OptionParser::call_int_pair(slot_int_pair slot, const std::string& arg) {
if (a < 0 || b < 0) if (a < 0 || b < 0)
throw std::runtime_error("Invalid argument, \"" + arg + "\" should be positive numbers"); throw std::runtime_error("Invalid argument, \"" + arg + "\" should be positive numbers");
slot(a, b); slot(a, b);
} }
+1 -2
View File
@@ -109,8 +109,7 @@ void
SCgi::activate() { SCgi::activate() {
assert(torrent::this_thread::thread() == scgi_thread::thread()); assert(torrent::this_thread::thread() == scgi_thread::thread());
torrent::this_thread::poll()->open(this); torrent::this_thread::poll()->open_and_insert_read(this);
torrent::this_thread::poll()->insert_read(this);
} }
// TODO: This should close the fd to avoid reuse. // TODO: This should close the fd to avoid reuse.
+1 -2
View File
@@ -47,8 +47,7 @@ SCgiTask::open(SCgi* parent, int fd) {
// m_trusted=false into the next reuse, given that the // m_trusted=false into the next reuse, given that the
// UNTRUSTED_CONNECTION=0 parse branch is a no-op. // UNTRUSTED_CONNECTION=0 parse branch is a no-op.
torrent::this_thread::poll()->open(this); torrent::this_thread::poll()->open_and_insert_read(this);
torrent::this_thread::poll()->insert_read(this);
auto lock = std::lock_guard<std::mutex>(m_result_mutex); auto lock = std::lock_guard<std::mutex>(m_result_mutex);
+7 -3
View File
@@ -108,18 +108,22 @@ config_comment_log(const std::string& command, const std::string& raw_args) {
throw torrent::input_error("Unknown log command: " + command); throw torrent::input_error("Unknown log command: " + command);
} }
// Call special commands in the format "# do:command=args" in the config file. // Call special commands in the format "# do:command=args" or "# do-<category>:command=args" in the config file.
void void
parse_config_file_comments(const std::string& path) { parse_config_file_comments(const std::string& category, const std::string& path) {
if (path.empty())
return;
std::fstream file(path, std::ios::in); std::fstream file(path, std::ios::in);
if (!file.is_open()) if (!file.is_open())
return; return;
std::string line; std::string line;
std::string prefix = category.empty() ? "# do:" : "# do-" + category + ":";
while (std::getline(file, line)) { while (std::getline(file, line)) {
if (line.size() <= 5 || line.compare(0, 5, "# do:") != 0) if (line.size() <= prefix.size() || line.compare(0, prefix.size(), prefix) != 0)
continue; continue;
auto equal_pos = line.find('='); auto equal_pos = line.find('=');
+1 -1
View File
@@ -6,7 +6,7 @@
int parse_main_options(int argc, char** argv); int parse_main_options(int argc, char** argv);
void parse_config_file(int argc, char** argv, std::function<void (const std::string&)> parse_fn); void parse_config_file(int argc, char** argv, std::function<void (const std::string&)> parse_fn);
void parse_config_file_comments(const std::string& path); void parse_config_file_comments(const std::string& category, const std::string& path);
void load_session_torrents(const std::string& path); void load_session_torrents(const std::string& path);
void load_arg_torrents(char** first, char** last); void load_arg_torrents(char** first, char** last);