From d89cf5b0bc9c9ea0d36d8d128e87501c836d49f5 Mon Sep 17 00:00:00 2001 From: victor Date: Fri, 1 Oct 2004 07:55:58 +0000 Subject: solved a frequent race git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@2216 63ad8ddf-47c3-0310-b6dd-a9e9d9715204 --- mbbsd/gamble.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/mbbsd/gamble.c b/mbbsd/gamble.c index 51fe99ef..d0e651e0 100644 --- a/mbbsd/gamble.c +++ b/mbbsd/gamble.c @@ -104,12 +104,24 @@ append_ticket_record(char *direct, int ch, int n, int count) fprintf(fp, "%s %d %d\n", cuser.userid, ch, n); fclose(fp); } - load_ticket_record(direct, ticket); - ticket[ch] += n; + snprintf(genbuf, sizeof(genbuf), "%s/" FN_TICKET_RECORD, direct); - if ((fp = fopen(genbuf, "w"))) { + if ((fp = fopen(genbuf, "w+"))) { + + flock(fileno(fp), LOCK_EX); + + for (i = 0; i < MAX_ITEM; i++) + if (fscanf(fp, "%9d ", &ticket[i]) != 1) + break; + ticket[ch] += n; + + ftruncate(fileno(fp), 0); + rewind(fp); for (i = 0; i < count; i++) fprintf(fp, "%d ", ticket[i]); + fflush(fp); + + flock(fileno(fp), LOCK_UN); fclose(fp); } } @@ -159,6 +171,7 @@ ticket(int bid) ch_buyitem(price, "etc/buyticket", &n, 0); if (bid && !dashf(fn_ticket)) { + // XXX 錢沒有退回 vmsg("哇!! 耐ㄚ捏...板主已經停止下注了 不能賭嚕"); break; } -- cgit v1.2.3