is this better?
diff -uprN qemu-1.4.1/gdbstub.c qemu-1.4.1-fix/gdbstub.c
--- qemu-1.4.1/gdbstub.c2013-04-15 23:25:18.0 +0300
+++ qemu-1.4.1-fix/gdbstub.c2013-04-18 21:35:00.0 +0300
@@ -379,17 +379,22 @@ static void put_buffer(GDBState *s, cons
{
#ifdef CONFIG_USER_ONLY
int ret;
-
+int fd_flags = fcntl (s-fd, F_GETFL, 0);
+fcntl (s-fd, F_SETFL, fd_flags ~O_NONBLOCK);
while (len 0) {
ret = send(s-fd, buf, len, 0);
if (ret 0) {
if (errno != EINTR errno != EAGAIN)
+{
+fcntl (s-fd, F_SETFL, fd_flags);
return;
+}
} else {
buf += ret;
len -= ret;
}
}
+fcntl (s-fd, F_SETFL, fd_flags);
#else
qemu_chr_fe_write(s-chr, buf, len);
#endif
@@ -2775,6 +2780,7 @@ gdb_handlesig (CPUArchState *env, int si
GDBState *s;
char buf[256];
int n;
+ int fd_flags;
s = gdbserver_state;
if (gdbserver_fd 0 || s-fd 0)
@@ -2793,7 +2799,8 @@ gdb_handlesig (CPUArchState *env, int si
connection. */
if (s-fd 0)
return sig;
-
+ fd_flags = fcntl (s-fd, F_GETFL, 0);
+ fcntl (s-fd, F_SETFL, fd_flags ~O_NONBLOCK);
sig = 0;
s-state = RS_IDLE;
s-running_state = 0;
@@ -2810,9 +2817,11 @@ gdb_handlesig (CPUArchState *env, int si
{
/* XXX: Connection closed. Should probably wait for another
connection before continuing. */
+ fcntl (s-fd, F_SETFL, fd_flags);
return sig;
}
}
+ fcntl (s-fd, F_SETFL, fd_flags);
sig = s-signal;
s-signal = 0;
return sig;
On Thu, Apr 18, 2013 at 9:46 PM, Orr Dvory gid...@gmail.com wrote:
is this better?
diff -uprN qemu-1.4.1/gdbstub.c qemu-1.4.1-fix/gdbstub.c
--- qemu-1.4.1/gdbstub.c2013-04-15 23:25:18.0 +0300
+++ qemu-1.4.1-fix/gdbstub.c2013-04-18 21:35:00.0 +0300
@@ -379,17 +379,22 @@ static void put_buffer(GDBState *s, cons
{
#ifdef CONFIG_USER_ONLY
int ret;
-
+int fd_flags = fcntl (s-fd, F_GETFL, 0);
+fcntl (s-fd, F_SETFL, fd_flags ~O_NONBLOCK);
while (len 0) {
ret = send(s-fd, buf, len, 0);
if (ret 0) {
if (errno != EINTR errno != EAGAIN)
+{
+fcntl (s-fd, F_SETFL, fd_flags);
return;
+}
} else {
buf += ret;
len -= ret;
}
}
+fcntl (s-fd, F_SETFL, fd_flags);
#else
qemu_chr_fe_write(s-chr, buf, len);
#endif
@@ -2775,6 +2780,7 @@ gdb_handlesig (CPUArchState *env, int si
GDBState *s;
char buf[256];
int n;
+ int fd_flags;
s = gdbserver_state;
if (gdbserver_fd 0 || s-fd 0)
@@ -2793,7 +2799,8 @@ gdb_handlesig (CPUArchState *env, int si
connection. */
if (s-fd 0)
return sig;
-
+ fd_flags = fcntl (s-fd, F_GETFL, 0);
+ fcntl (s-fd, F_SETFL, fd_flags ~O_NONBLOCK);
sig = 0;
s-state = RS_IDLE;
s-running_state = 0;
@@ -2810,9 +2817,11 @@ gdb_handlesig (CPUArchState *env, int si
{
/* XXX: Connection closed. Should probably wait for another
connection before continuing. */
+ fcntl (s-fd, F_SETFL, fd_flags);
return sig;
}
}
+ fcntl (s-fd, F_SETFL, fd_flags);
sig = s-signal;
s-signal = 0;
return sig;
On Wed, Feb 20, 2013 at 10:38 PM, Paolo Bonzini pbonz...@redhat.comwrote:
Il 20/02/2013 20:39, Orr Dvory ha scritto:
if (errno != EINTR errno != EAGAIN)
+/* there's no need to restore the
+O_NONBLOCK option. */
return;
+
But it's cleaner to do it anyway. :)
Paolo