Well, I have tried to create two different dir_monitor instances (for different folders) on a single dir_monitor with a code like this:
#include <dir_monitor/dir_monitor.hpp>
#include <iostream>
struct moni {
moni(boost::asio::io_service& ios) : m1(ios), m2(ios) {}
boost::asio::dir_monitor m1, m2;
void m1_operation() {
std::cout << 1 << std::endl;
m1.async_monitor([this](boost::system::error_code ec, boost::asio::dir_monitor_event ev){
if(ec == boost::asio::error::operation_aborted) return;
std::cout << ev << std::endl;
m1_operation();
});
}
void m2_operation() {
std::cout << 2 << std::endl;
m2.async_monitor([this](boost::system::error_code ec, boost::asio::dir_monitor_event ev){
if(ec == boost::asio::error::operation_aborted) return;
std::cout << ev << std::endl;
m2_operation();
});
}
};
int main() {
boost::asio::io_service ios;
moni m(ios);
m.m1.add_directory("path_to_dir1");
m.m2.add_directory("path_to_dir2");
m.m1_operation();
m.m2_operation();
ios.run();
}
1
2
dir_monitor_event ADDED "/home/gamepad/Librevault/New Folder"
1
dir_monitor_event ADDED "/home/gamepad/Librevault2/New Folder (1)"
2
dir_monitor_event ADDED "/home/gamepad/Librevault/.librevault/librevault.db-journal"
1
dir_monitor_event ADDED "/home/gamepad/Librevault2/.librevault/librevault.db-journal"
2
dir_monitor_event MODIFIED "/home/gamepad/Librevault/.librevault/librevault.db-journal"
1
dir_monitor_event MODIFIED "/home/gamepad/Librevault2/.librevault/librevault.db-journal"
2
dir_monitor_event REMOVED "/home/gamepad/Librevault/.librevault/librevault.db-journal"
1
dir_monitor_event REMOVED "/home/gamepad/Librevault2/.librevault/librevault.db-journal"
2
This is abnormal behavior for boost::asio. Btw, two dir_monitors on two separate io_services work fine.
Tested with inotify and fsevents backends. Reproducible in 100% cases.