diff --git a/common/url.go b/common/url.go
index 5f8ffadad7bf1373ca649efe9d5e401cd80caa95..b3168cae3580047dda2e65806dcf8a9fa528725b 100644
--- a/common/url.go
+++ b/common/url.go
@@ -397,8 +397,8 @@ func (c URL) Service() string {
 
 // AddParam will add the key-value pair
 func (c *URL) AddParam(key string, value string) {
-	c.paramsLock.RLock()
-	defer c.paramsLock.RUnlock()
+	c.paramsLock.Lock()
+	defer c.paramsLock.Unlock()
 	c.params.Add(key, value)
 }
 
@@ -414,19 +414,34 @@ func (c *URL) AddParamAvoidNil(key string, value string) {
 // SetParam will put the key-value pair into url
 // usually it should only be invoked when you want to initialized an url
 func (c *URL) SetParam(key string, value string) {
-	c.paramsLock.RLock()
-	defer c.paramsLock.RUnlock()
+	c.paramsLock.Lock()
+	defer c.paramsLock.Unlock()
 	c.params.Set(key, value)
 }
 
 // RangeParams will iterate the params
 func (c *URL) RangeParams(f func(key, value string) bool) {
-	c.paramsLock.RLock()
-	defer c.paramsLock.RUnlock()
-	for k, v := range c.params {
-		if !f(k, v[0]) {
-			break
+	var (
+		flag bool
+		key string
+		value string
+	)
+
+	func() {
+		c.paramsLock.RLock()
+		defer c.paramsLock.RUnlock()
+		for k, v := range c.params {
+			if !f(k, v[0]) {
+				key = k
+				value = v[0]
+				flag = true
+				break
+			}
 		}
+	}()
+
+	if flag {
+		f(key, value)
 	}
 }