From 62468c81bf946c3e6fca077e62ed2c96214346d6 Mon Sep 17 00:00:00 2001 From: kevin Date: Thu, 12 Mar 2015 16:34:16 +0800 Subject: [PATCH] use flock when write bitcoin list file --- scripts/generate.php | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/scripts/generate.php b/scripts/generate.php index c51fc69f..5312c285 100644 --- a/scripts/generate.php +++ b/scripts/generate.php @@ -67,11 +67,29 @@ function dump_for_ss_server($exist_txs) { $address[] = $_tx['address']; } $str = implode("\n", $address)."\n"; + LOGI("try dump ".count($address)." address to ss_server_file"); - LOGI("dump ".count($address)." address to ss_server_file"); - if (file_put_contents($_CFG['ss_server_file'], $str) == false) { - LOGI("write file fail: {$_CFG['ss_server_file']}"); + $exist = file_exists($_CFG['ss_server_file']); + $fp = fopen($_CFG['ss_server_file'], $exist ? "r+" : "w"); + if (!$fp) { + LOGI("write file failure: {$_CFG['ss_server_file']}"); + return; + } + + // use flock when write file + for ($i = 0; $i < 3; $i++) { // try 3 times if need + if (!flock($fp, LOCK_EX | LOCK_NB)) { + sleep(3);continue; + } + ftruncate($fp, 0); + fwrite($fp, $str); + fflush($fp); + flock($fp, LOCK_UN); + + LOGI("write file success: {$_CFG['ss_server_file']}"); + break; } + fclose($fp); }