From 58b78818e00b7518350c7a45474bb00d7584bf6d Mon Sep 17 00:00:00 2001
From: oharboe <oharboe@b42882b7-edfa-0310-969c-e2dbd0fdcd60>
Date: Fri, 11 Sep 2009 06:58:49 +0000
Subject: registering a target event twice caused infinite loop. Same bug as in
 jtag/core.c copy & pasted.

git-svn-id: svn://svn.berlios.de/openocd/trunk@2690 b42882b7-edfa-0310-969c-e2dbd0fdcd60
---
 src/target/target.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

(limited to 'src/target')

diff --git a/src/target/target.c b/src/target/target.c
index 56e124f7..223a0356 100644
--- a/src/target/target.c
+++ b/src/target/target.c
@@ -2,7 +2,7 @@
  *   Copyright (C) 2005 by Dominic Rath                                    *
  *   Dominic.Rath@gmx.de                                                   *
  *                                                                         *
- *   Copyright (C) 2007,2008 Øyvind Harboe                                 *
+ *   Copyright (C) 2007-2009 Øyvind Harboe                                 *
  *   oyvind.harboe@zylin.com                                               *
  *                                                                         *
  *   Copyright (C) 2008, Duane Ellis                                       *
@@ -3547,9 +3547,11 @@ static int target_configure(Jim_GetOptInfo *goi, target_t *target)
 				}
 
 				if (goi->isconfigure) {
+					bool replace = true;
 					if (teap == NULL) {
 						/* create new */
 						teap = calloc(1, sizeof(*teap));
+						replace = false;
 					}
 					teap->event = n->value;
 					Jim_GetOpt_Obj(goi, &o);
@@ -3569,9 +3571,12 @@ static int target_configure(Jim_GetOptInfo *goi, target_t *target)
 					 */
 					Jim_IncrRefCount(teap->body);
 
-					/* add to head of event list */
-					teap->next = target->event_action;
-					target->event_action = teap;
+					if (!replace)
+					{
+						/* add to head of event list */
+						teap->next = target->event_action;
+						target->event_action = teap;
+					}
 					Jim_SetEmptyResult(goi->interp);
 				} else {
 					/* get */
-- 
cgit v1.2.3