From 1b7adf57e94aaccd2abc6c7288947e36bb311c0a Mon Sep 17 00:00:00 2001
From: Unknwon <joe2010xtmf@163.com>
Date: Fri, 12 Sep 2014 18:58:24 -0400
Subject: [PATCH] fix https://github.com/go-xorm/xorm/issues/161

---
 models/models.go  |  2 +-
 models/webhook.go | 17 ++++++++++++-----
 2 files changed, 13 insertions(+), 6 deletions(-)

diff --git a/models/models.go b/models/models.go
index 247bcf2f65..283a8f7a93 100644
--- a/models/models.go
+++ b/models/models.go
@@ -77,7 +77,7 @@ func getEngine() (*xorm.Engine, error) {
 			return nil, fmt.Errorf("Unknown database type: %s", DbCfg.Type)
 		}
 		os.MkdirAll(path.Dir(DbCfg.Path), os.ModePerm)
-		cnnstr = DbCfg.Path
+		cnnstr = "file:" + DbCfg.Path + "?cache=shared&mode=rwc"
 	default:
 		return nil, fmt.Errorf("Unknown database type: %s", DbCfg.Type)
 	}
diff --git a/models/webhook.go b/models/webhook.go
index 5c0e217975..3c07cc8179 100644
--- a/models/webhook.go
+++ b/models/webhook.go
@@ -236,6 +236,7 @@ func UpdateHookTask(t *HookTask) error {
 
 // DeliverHooks checks and delivers undelivered hooks.
 func DeliverHooks() {
+	tasks := make([]*HookTask, 0, 10)
 	timeout := time.Duration(setting.WebhookDeliverTimeout) * time.Second
 	x.Where("is_delivered=?", false).Iterate(new(HookTask),
 		func(idx int, bean interface{}) error {
@@ -283,12 +284,18 @@ func DeliverHooks() {
 				}
 			}
 
-			if err := UpdateHookTask(t); err != nil {
-				log.Error(4, "UpdateHookTask: %v", err)
-				return nil
-			}
+			tasks = append(tasks, t)
 
-			log.Trace("Hook delivered(%s): %s", t.Uuid, t.PayloadContent)
+			if t.IsSucceed {
+				log.Trace("Hook delivered(%s): %s", t.Uuid, t.PayloadContent)
+			}
 			return nil
 		})
+
+	// Update hook task status.
+	for _, t := range tasks {
+		if err := UpdateHookTask(t); err != nil {
+			log.Error(4, "UpdateHookTask(%d): %v", t.Id, err)
+		}
+	}
 }