diff --git a/cdr/cdr_csv.c b/cdr/cdr_csv.c
index 6fb2b7160f1366ee290068be982f0cf3ca7d4a4c..31f95c00f0beecfb1a4ea959997c796b8ff4a00d 100644
--- a/cdr/cdr_csv.c
+++ b/cdr/cdr_csv.c
@@ -60,6 +60,7 @@ static int loguserfield = 0;
 static int loaded = 0;
 static int newcdrcolumns = 0;
 static const char config[] = "cdr.conf";
+static char file_csv_master[PATH_MAX];
 
 /* #define CSV_LOGUNIQUEID 1 */
 /* #define CSV_LOGUSERFIELD 1 */
@@ -120,6 +121,12 @@ static int load_config(int reload)
 		return 0;
 	}
 
+	/* compute the location of the csv master file */
+	ast_mutex_lock(&f_lock);
+	snprintf(file_csv_master, sizeof(file_csv_master),
+		"%s/%s/%s", ast_config_AST_LOG_DIR, CSV_LOG_DIR, CSV_MASTER);
+	ast_mutex_unlock(&f_lock);
+
 	for (; v; v = v->next) {
 		if (!strcasecmp(v->name, "usegmtime")) {
 			usegmtime = ast_true(v->value);
@@ -293,16 +300,14 @@ static int csv_log(struct ast_cdr *cdr)
 {
 	/* Make sure we have a big enough buf */
 	char buf[1024];
-	char csvmaster[PATH_MAX];
-	snprintf(csvmaster, sizeof(csvmaster),"%s/%s/%s", ast_config_AST_LOG_DIR, CSV_LOG_DIR, CSV_MASTER);
 	if (build_csv_record(buf, sizeof(buf), cdr)) {
 		ast_log(LOG_WARNING, "Unable to create CSV record in %d bytes.  CDR not recorded!\n", (int)sizeof(buf));
 		return 0;
 	}
 
 	ast_mutex_lock(&f_lock);
-	if (writefile(buf, csvmaster))
-		ast_log(LOG_WARNING, "Unable to write CSV record to master '%s' : %s\n", csvmaster, strerror(errno));
+	if (writefile(buf, file_csv_master))
+		ast_log(LOG_WARNING, "Unable to write CSV record to master '%s' : %s\n", file_csv_master, strerror(errno));
 
 	if (accountlogs && !ast_strlen_zero(cdr->accountcode)) {
 		if (writefile_account(buf, cdr->accountcode))