diff --git a/userspace/falco/CMakeLists.txt b/userspace/falco/CMakeLists.txt index a84168de..c072fc36 100644 --- a/userspace/falco/CMakeLists.txt +++ b/userspace/falco/CMakeLists.txt @@ -167,6 +167,7 @@ target_include_directories(falco PUBLIC ${FALCO_INCLUDE_DIRECTORIES}) if (EMSCRIPTEN) target_compile_options(falco PRIVATE "-sDISABLE_EXCEPTION_CATCHING=0") + target_link_options(falco PRIVATE "-sALLOW_MEMORY_GROWTH=1") target_link_options(falco PRIVATE "-sDISABLE_EXCEPTION_CATCHING=0") target_link_options(falco PRIVATE "-sEXPORTED_FUNCTIONS=['_main','_htons','_ntohs']") endif() diff --git a/userspace/falco/app/actions/load_plugins.cpp b/userspace/falco/app/actions/load_plugins.cpp index 7fb9b138..ff0790ec 100644 --- a/userspace/falco/app/actions/load_plugins.cpp +++ b/userspace/falco/app/actions/load_plugins.cpp @@ -25,7 +25,7 @@ falco::app::run_result falco::app::actions::load_plugins(falco::app::state& s) #if !defined(MUSL_OPTIMIZED) and !defined(__EMSCRIPTEN__) if (!s.config->m_plugins.empty()) { - return run_result::fatal("Loading plugins dynamic libraries is not supported with this Falco build"); + return run_result::fatal("Loading plugins dynamic libraries is not supported by this Falco build"); } #endif // Initialize the set of loaded event sources. diff --git a/userspace/falco/app/actions/process_events.cpp b/userspace/falco/app/actions/process_events.cpp index 7f07032a..25b7554f 100644 --- a/userspace/falco/app/actions/process_events.cpp +++ b/userspace/falco/app/actions/process_events.cpp @@ -493,6 +493,13 @@ falco::app::run_result falco::app::actions::process_events(falco::app::state& s) { print_enabled_event_sources(s); +#ifdef __EMSCRIPTEN__ + if(s.enabled_sources.size() > 1) + { + return run_result::fatal("enabling multiple event sources is not supported by this Falco build"); + } +#endif + // start event processing for all enabled sources falco::semaphore termination_sem(s.enabled_sources.size()); std::vector ctxs; diff --git a/userspace/falco/falco_outputs.cpp b/userspace/falco/falco_outputs.cpp index 67d779f8..30852096 100644 --- a/userspace/falco/falco_outputs.cpp +++ b/userspace/falco/falco_outputs.cpp @@ -64,13 +64,16 @@ falco_outputs::falco_outputs( { add_output(output); } - +#ifndef __EMSCRIPTEN__ m_worker_thread = std::thread(&falco_outputs::worker, this); +#endif } falco_outputs::~falco_outputs() { +#ifndef __EMSCRIPTEN__ this->stop_worker(); +#endif for(auto o : m_outputs) { delete o; @@ -274,6 +277,11 @@ inline void falco_outputs::push(const ctrl_msg& cmsg) fprintf(stderr, "Fatal error: Output queue reached maximum capacity. Exiting.\n"); exit(EXIT_FAILURE); } +#else + for (auto o : m_outputs) + { + process_msg(o, cmsg); + } #endif } @@ -297,26 +305,12 @@ void falco_outputs::worker() noexcept m_queue.pop(cmsg); #endif - for(const auto o : m_outputs) + for(auto o : m_outputs) { wd.set_timeout(timeout, o->get_name()); try { - switch(cmsg.type) - { - case ctrl_msg_type::CTRL_MSG_OUTPUT: - o->output(&cmsg); - break; - case ctrl_msg_type::CTRL_MSG_CLEANUP: - case ctrl_msg_type::CTRL_MSG_STOP: - o->cleanup(); - break; - case ctrl_msg_type::CTRL_MSG_REOPEN: - o->reopen(); - break; - default: - falco_logger::log(LOG_DEBUG, "Outputs worker received an unknown message type\n"); - } + process_msg(o, cmsg); } catch(const std::exception &e) { @@ -326,3 +320,22 @@ void falco_outputs::worker() noexcept wd.cancel_timeout(); } while(cmsg.type != ctrl_msg_type::CTRL_MSG_STOP); } + +inline void falco_outputs::process_msg(falco::outputs::abstract_output* o, const ctrl_msg& cmsg) +{ + switch(cmsg.type) + { + case ctrl_msg_type::CTRL_MSG_OUTPUT: + o->output(&cmsg); + break; + case ctrl_msg_type::CTRL_MSG_CLEANUP: + case ctrl_msg_type::CTRL_MSG_STOP: + o->cleanup(); + break; + case ctrl_msg_type::CTRL_MSG_REOPEN: + o->reopen(); + break; + default: + falco_logger::log(LOG_DEBUG, "Outputs worker received an unknown message type\n"); + } +} diff --git a/userspace/falco/falco_outputs.h b/userspace/falco/falco_outputs.h index 5a95990f..7e99453d 100644 --- a/userspace/falco/falco_outputs.h +++ b/userspace/falco/falco_outputs.h @@ -118,4 +118,5 @@ private: void worker() noexcept; void stop_worker(); void add_output(falco::outputs::config oc); + inline void process_msg(falco::outputs::abstract_output* o, const ctrl_msg& cmsg); };