From 1960973baf8022b4525e3ac94aed8dace7f9b478 Mon Sep 17 00:00:00 2001
From: drath <drath@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Date: Sun, 25 Jun 2006 21:02:44 +0000
Subject: [PATCH] - fixed bug in Thumb sw breakpoint handling (thanks to Spen
 for this patch) - fixed handling of services linked list (thanks to Spen for
 this patch)

git-svn-id: svn://svn.berlios.de/openocd/trunk@76 b42882b7-edfa-0310-969c-e2dbd0fdcd60
---
 src/openocd.c              |  2 +-
 src/server/server.c        | 40 +++++++++++++++++---------------------
 src/target/arm7_9_common.c |  2 +-
 3 files changed, 20 insertions(+), 24 deletions(-)

diff --git a/src/openocd.c b/src/openocd.c
index b83929115..9e71dbeb2 100644
--- a/src/openocd.c
+++ b/src/openocd.c
@@ -18,7 +18,7 @@
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 
-#define OPENOCD_VERSION "Open On-Chip Debugger (2006-06-25 22:45 CEST)"
+#define OPENOCD_VERSION "Open On-Chip Debugger (2006-06-25 23:00 CEST)"
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
diff --git a/src/server/server.c b/src/server/server.c
index a034da792..628c4925a 100644
--- a/src/server/server.c
+++ b/src/server/server.c
@@ -86,19 +86,16 @@ int add_connection(service_t *service, command_context_t *cmd_ctx)
 
 int remove_connection(service_t *service, connection_t *connection)
 {
-	connection_t *c, *p = NULL;
-
+	connection_t *c = service->connections;
+	
 	/* find connection */
-	for (c = service->connections; c; c = c->next)
+	while(c)
 	{
+		connection_t *next = c->next;
+		
 		if (c->fd == connection->fd)
-		{
-			/* unlink connection */
-			if (p)
-				p->next = c->next;
-			else
-				service->connections = c->next;
-			
+		{	
+			service->connections = next;
 			service->connection_closed(c);
 			close(c->fd);
 			
@@ -112,7 +109,7 @@ int remove_connection(service_t *service, connection_t *connection)
 		}
 		
 		/* remember the last connection for unlinking */
-		p = c;
+		c = next;
 	}
 	
 	return ERROR_OK;
@@ -182,28 +179,27 @@ int add_service(char *name, enum connection_type type, unsigned short port, int
 
 int remove_service(unsigned short port)
 {
-	service_t *c, *p = NULL;
-
+	service_t *c = services;
+	
 	/* find service */
-	for (c = services; c; c = c->next)
+	while(c)
 	{
+		service_t *next = c->next;
+		
 		if (c->port == port)
-		{
-			/* unlink service */
-			if (p)
-				p->next = c->next;
-			else
-				services = c->next;
-			
+		{	
 			if (c->name)
 				free(c->name);
 			
+			if (c->priv)
+				free(c->priv);
+			
 			/* delete service */
 			free(c);
 		}
 		
 		/* remember the last service for unlinking */
-		p = c;
+		c = next;
 	}
 	
 	return ERROR_OK;
diff --git a/src/target/arm7_9_common.c b/src/target/arm7_9_common.c
index e0ccd7a5e..1e58ec9d5 100644
--- a/src/target/arm7_9_common.c
+++ b/src/target/arm7_9_common.c
@@ -186,7 +186,7 @@ int arm7_9_set_breakpoint(struct target_s *target, breakpoint_t *breakpoint)
 		else
 		{
 			target->type->read_memory(target, breakpoint->address, 2, 1, breakpoint->orig_instr);
-			target->type->read_memory(target, breakpoint->address, 2, 1, (u8*)(&arm7_9->arm_bkpt));
+			target->type->write_memory(target, breakpoint->address, 2, 1, (u8*)(&arm7_9->arm_bkpt));
 		}
 		breakpoint->set = 1;
 	}
-- 
GitLab