в конструкторе - вызов libusb_init и libusb_set_pollfd_notifiers, в деструкторе - libusb_exit. callbacks для обработки pollfd_notifiers -
void context_on_fd_added(int fd,
short events,
void *user_data)
{
std::shared_ptr<LibUsb::Context> ctx =
static_cast<LibUsb::Context*>(user_data)->shared_from_this();
ctx->file_descriptor_added(ctx, fd, events);
}
void context_on_fd_removed(int fd,
void *user_data)
{
std::shared_ptr<LibUsb::Context> ctx =
static_cast<LibUsb::Context*>(user_data)->shared_from_this();
ctx->file_descriptor_removed(ctx, fd);
}
проблема: при вызове libusb_exit освобождаются poll fds и вызываются каллбаки. в каллбаках - попытка взять shared_from_this из Context, а Context уже полумертв (terminate called after throwing an instance of 'std::bad_weak_ptr' при попытке взять shared_from_this). как лучше обойти? вынести libusb_exit в отдельный метод?
Перед первым вызовом shared_from_this() сам Context уже хранится во "внешнем" shared_ptr?
Context хранится в шаредптр внутри main
Обсуждают сегодня