ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
27 апреля
1387016 Топик полностью
vGimly (27.12.2023 09:52, просмотров: 33) ответил Eddy_Em на А можно конкретно пальцем ткнуть, где там косяк? Смотрел-смотрел, ничего криминального не нашел.
Может это? 
index a2a897d4442d8de1658c74d7691499702aac8ad6..07cd8b7b5b4bdbfccad8ff31fc86d5279f0d0ca1 100644 (file)
--- a/gdb/ser-unix.c
+++ b/gdb/ser-unix.c
@@ -574,7 +574,10 @@ when debugging using remote targets."),
 int
 ser_unix_read_prim (struct serial *scb, size_t count)
 {
-  return read (scb->fd, scb->buf, count);
+  int result = recv (scb->fd, scb->buf, count, 0);
+  if (result == -1 && errno != EINTR)
+    perror_with_name ("error while reading");
+  return result;
 }

Вместо read стало делать recv - необъяснимо - и думаю не сильно правильно.


Могла быть копипаста с предыдущего фрагмента патча (там именно recv -> recv + сообщение об ошибке было):

--- a/gdb/ser-uds.c
+++ b/gdb/ser-uds.c
@@ -69,7 +69,10 @@ uds_close (struct serial *scb)
static int
uds_read_prim (struct serial *scb, size_t count)
{
- return recv (scb->fd, scb->buf, count, 0);
+ int result = recv (scb->fd, scb->buf, count, 0);

В целом то патч выглядит безобидным - ну добавили кучу дополнительных сообщений о внезапных ошибках чтения/обрывах связи.
Если бы не этот гендерный переход read->recv.