From 9e31813bc81a55a2cde55ae365d4c0f6f6eac23f Mon Sep 17 00:00:00 2001
From: in2 <in2@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>
Date: Thu, 6 Jan 2005 08:15:57 +0000
Subject: if SHM->Bbusystate is true in bcache_reload, wait at most 10 secs
 then ignore the lock and do bcache_reload.

git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@2386 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
---
 mbbsd/cache.c | 36 ++++++++++++++++++------------------
 1 file changed, 18 insertions(+), 18 deletions(-)

diff --git a/mbbsd/cache.c b/mbbsd/cache.c
index 6c81ce00..5ac60128 100644
--- a/mbbsd/cache.c
+++ b/mbbsd/cache.c
@@ -546,27 +546,27 @@ sort_bcache(void)
 void
 reload_bcache(void)
 {
-    if (SHM->Bbusystate) {
-	safe_sleep(1);
+    int     i, fd;
+    for( i = 0 ; i < 10 && SHM->Bbusystate ; ++i ){
+	printf("SHM->Bbusystate is currently locked (value: %d). "
+	       "please wait... ", SHM->Bbusystate);
+	sleep(1);
     }
-    else {
-	int             fd;
 
-	SHM->Bbusystate = 1;
-	if ((fd = open(fn_board, O_RDONLY)) > 0) {
-	    SHM->Bnumber =
-		read(fd, bcache, MAX_BOARD * sizeof(boardheader_t)) /
-		sizeof(boardheader_t);
-	    close(fd);
-	}
-	memset(SHM->lastposttime, 0, MAX_BOARD * sizeof(time_t));
-	memset(SHM->total, 0, MAX_BOARD * sizeof(int));
-	/* ���Ҧ� boards ��Ƨ�s��A�]�w uptime */
-	SHM->Buptime = SHM->Btouchtime;
-	log_usies("CACHE", "reload bcache");
-	SHM->Bbusystate = 0;
-	sort_bcache();
+    SHM->Bbusystate = 1;
+    if ((fd = open(fn_board, O_RDONLY)) > 0) {
+	SHM->Bnumber =
+	    read(fd, bcache, MAX_BOARD * sizeof(boardheader_t)) /
+	    sizeof(boardheader_t);
+	close(fd);
     }
+    memset(SHM->lastposttime, 0, MAX_BOARD * sizeof(time_t));
+    memset(SHM->total, 0, MAX_BOARD * sizeof(int));
+    /* ���Ҧ� boards ��Ƨ�s��A�]�w uptime */
+    SHM->Buptime = SHM->Btouchtime;
+    log_usies("CACHE", "reload bcache");
+    SHM->Bbusystate = 0;
+    sort_bcache();
 }
 
 void resolve_boards(void)
-- 
cgit v1.2.3