Fix a bug in matching notifications.
authorYao Qi <yao@codesourcery.com>
Tue, 10 Dec 2013 13:59:20 +0000 (21:59 +0800)
committerYao Qi <yao@codesourcery.com>
Wed, 11 Dec 2013 01:38:58 +0000 (09:38 +0800)
Due to copy-n-paste, the problem caused PR remote/15974 also exists
in gdbserver.  This patch fixes it in the same way.  Patch to fix
remote/15974 can be found:

  https://sourceware.org/ml/gdb-patches/2013-12/msg00014.html

gdb/gdbserver:

2013-12-11  Yao Qi  <yao@codesourcery.com>

* notif.c (handle_notif_ack): Return 0 if no notification
matches.

gdb/gdbserver/ChangeLog
gdb/gdbserver/notif.c

index eb6f2849e2f14fdae4b0d51c564eac71a1db09f5..26d305e01e149512d92da477914d43ca7e89f221 100644 (file)
@@ -1,3 +1,8 @@
+2013-12-11  Yao Qi  <yao@codesourcery.com>
+
+       * notif.c (handle_notif_ack): Return 0 if no notification
+       matches.
+
 2013-11-20  Doug Evans  <dje@google.com>
 
        * linux-low.c (linux_set_resume_request): Fix comment.
index e27746e43872c5796988bcec248a854233ceea11..6da2c5cf534599c3b070d4b595cb8182ac4e7181 100644 (file)
@@ -78,20 +78,23 @@ notif_write_event (struct notif_server *notif, char *own_buf)
 int
 handle_notif_ack (char *own_buf, int packet_len)
 {
-  int i = 0;
-  struct notif_server *np = NULL;
+  size_t i;
+  struct notif_server *np;
 
   for (i = 0; i < ARRAY_SIZE (notifs); i++)
     {
-      np = notifs[i];
-      if (strncmp (own_buf, np->ack_name, strlen (np->ack_name)) == 0
-         && packet_len == strlen (np->ack_name))
+      const char *ack_name = notifs[i]->ack_name;
+
+      if (strncmp (own_buf, ack_name, strlen (ack_name)) == 0
+         && packet_len == strlen (ack_name))
        break;
     }
 
-  if (np == NULL)
+  if (i == ARRAY_SIZE (notifs))
     return 0;
 
+  np = notifs[i];
+
   /* If we're waiting for GDB to acknowledge a pending event,
      consider that done.  */
   if (!QUEUE_is_empty (notif_event_p, np->queue))