libmodbus при использовании select вылетает с переполнением буфера

Мы используем версию 3.1.4-2 libmodbus на debian 10, 32-битный Linux(AMD).

Мы сталкиваемся с «ошибкой переполнения буфера, и ниже показан дамп ядра.

      #6 0xb6fce11e in __GI___fortify_fail (msg=0xb7044182 "buffer overflow detected") at fortify_fail.c:44
#7 0xb6fcc559 in __GI___chk_fail () at chk_fail.c:28
#8 0xb6fcdffa in __fdelt_chk (d=1138) at fdelt_chk.c:25
#9 0xb7ef4a72 in ?? () from /lib/i386-linux-gnu/libmodbus.so.5
#10 0xb7ef4d82 in ?? () from /lib/i386-linux-gnu/libmodbus.so.5
#11 0x006077f5 in XXX::connectandread() ()
#12 0x0060a3f1 in XXX::XXX(XXXControllerConfiguration, QString, int, DsuDiagnostics*) ()
#13 0x00545955 in WagoThread::run() ()
#14 0xb7417666 in ?? () from /lib/i386-linux-gnu/sse2/libQt5Core.so.5
#15 0xb734afd2 in start_thread (arg=<optimized out>) at pthread_create.c:486
#16 0xb6fbd6d6 in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:108

С этим похоже libmodbus использует select() и нет poll() из-за чего при количестве FD более 1024 приложение завершается.

Как решить эту проблему?

Мы не можем уменьшить количество FD, поскольку мы используем какой-то сторонний компонент, который открывает многие FD для операций с базой данных.

В репозитории libmodbus возникла проблема, предлагающая использовать опрос вместо выбора, но не упоминается, как это можно сделать.

Есть ли обходной путь для этого?

0 ответов

Другие вопросы по тегам