diff --git a/pbx.c b/pbx.c
index 20754475fb14dc43b481b1a7714f25f81fdc7f7e..57f8c6e1d5ceb4a57621593e496c2f203db06d86 100644
--- a/pbx.c
+++ b/pbx.c
@@ -1196,10 +1196,9 @@ static int handle_show_function(int fd, int argc, char *argv[])
 static char *complete_show_function(char *line, char *word, int pos, int state)
 {
 	struct ast_custom_function *acf;
+	char *ret = NULL;
 	int which = 0;
-	int wordlen;
-
-	wordlen = strlen(word);
+	int wordlen = strlen(word);
 
 	/* try to lock functions list ... */
 	if (ast_mutex_lock(&acflock)) {
@@ -1210,15 +1209,15 @@ static char *complete_show_function(char *line, char *word, int pos, int state)
 	for (acf = acf_root; acf; acf = acf->next) {
 		if (!strncasecmp(word, acf->name, wordlen)) {
 			if (++which > state) {
-				char *ret = strdup(acf->name);
-				ast_mutex_unlock(&acflock);
-				return ret;
+				ret = strdup(acf->name);
+				break;
 			}
 		}
 	}
 
 	ast_mutex_unlock(&acflock);
-	return NULL; 
+
+	return ret; 
 }
 
 struct ast_custom_function* ast_custom_function_find(const char *name)