diff options
author | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2008-01-10 00:11:05 +0800 |
---|---|---|
committer | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2008-01-10 00:11:05 +0800 |
commit | 603d2ded05450918e5cd857a4379c4715a76ba43 (patch) | |
tree | e68918009a82031ca4c8a463f944996bdbe541d0 | |
parent | 7b794f4dfbfe35135fffc78ed5187bbfa5ac1436 (diff) | |
download | pttbbs-603d2ded05450918e5cd857a4379c4715a76ba43.tar pttbbs-603d2ded05450918e5cd857a4379c4715a76ba43.tar.gz pttbbs-603d2ded05450918e5cd857a4379c4715a76ba43.tar.bz2 pttbbs-603d2ded05450918e5cd857a4379c4715a76ba43.tar.lz pttbbs-603d2ded05450918e5cd857a4379c4715a76ba43.tar.xz pttbbs-603d2ded05450918e5cd857a4379c4715a76ba43.tar.zst pttbbs-603d2ded05450918e5cd857a4379c4715a76ba43.zip |
- mmbsd: improve DEBUGSLEEP proctitle for debugging multiple versions
- bbs: try to prevent mmap SEGV issue (caused by mv(1) truncating ?)
- pmore: change back to MAP_SHARED, and try MAP_POPULATE
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3810 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r-- | mbbsd/bbs.c | 9 | ||||
-rw-r--r-- | mbbsd/mbbsd.c | 29 | ||||
-rw-r--r-- | mbbsd/pmore.c | 7 |
3 files changed, 40 insertions, 5 deletions
diff --git a/mbbsd/bbs.c b/mbbsd/bbs.c index 31d74a62..87b6f140 100644 --- a/mbbsd/bbs.c +++ b/mbbsd/bbs.c @@ -1560,8 +1560,13 @@ edit_post(int ent, fileheader_t * fhdr, const char *direct) // OK to save file. - // force to remove file first? - // unlink(genbuf); + // piaip Wed Jan 9 11:11:33 CST 2008 + // in order to prevent calling system 'mv' all the + // time, it is better to unlink() first, which + // increased the chance of succesfully using rename(). + // WARNING: if genbuf and fpath are in different directory, + // you should disable pre-unlinking + unlink(genbuf); Rename(fpath, genbuf); fhdr->modified = dasht(genbuf); diff --git a/mbbsd/mbbsd.c b/mbbsd/mbbsd.c index 7e6b52ab..23fa1e73 100644 --- a/mbbsd/mbbsd.c +++ b/mbbsd/mbbsd.c @@ -217,6 +217,10 @@ abort_bbs(int sig) exit(0); } +#ifdef DEBUGSLEEP +static unsigned int dbg_myrev = 0; +#endif // DEBUGSLEEP + #ifdef GCC_NORETURN static void abort_bbs_debug(int sig) GCC_NORETURN; #endif @@ -293,7 +297,8 @@ abort_bbs_debug(int sig) #ifdef DEBUGSLEEP #ifndef VALGRIND - setproctitle("debug me!(%d)(%s,%d)", sig, cuser.userid, currstat); + setproctitle("debug me!(%d)(%s,%d)[%08u]", sig, + cuser.userid, currstat, dbg_myrev); #endif /* do this manually to prevent broken stuff */ /* will broken currutmp cause problems here? hope not... */ @@ -1506,6 +1511,24 @@ static int daemon_login(int argc, char *argv[], char *envp[]); static int check_ban_and_load(int fd); static int check_banip(char *host); +#ifdef DEBUGSLEEP + +static void +solve_symlink(const char *path) +{ + char buf[PATHLEN]; + char *pdot = NULL; + if (readlink(path, buf, sizeof(buf)-1) < 1) + return; + buf[PATHLEN-1] = 0; + pdot = strrchr(buf, '.'); + if (!pdot) + return; + dbg_myrev = (unsigned int)atoi(pdot+1); +} + +#endif // DEBUGSLEEP + int main(int argc, char *argv[], char *envp[]) { @@ -1518,6 +1541,10 @@ main(int argc, char *argv[], char *envp[]) Signal(SIGUSR1, SIG_IGN); Signal(SIGUSR2, SIG_IGN); +#ifdef DEBUGSLEEP + solve_symlink(argv[0]); +#endif // DEBUGSLEEP + #if defined(__GLIBC__) && defined(CRITICAL_MEMORY) #define MY__MMAP_THRESHOLD (1024 * 8) #define MY__MMAP_MAX (0) diff --git a/mbbsd/pmore.c b/mbbsd/pmore.c index a67eb4de..f4e6b285 100644 --- a/mbbsd/pmore.c +++ b/mbbsd/pmore.c @@ -116,10 +116,13 @@ #include <string.h> // Platform Related. NoSync is faster but if we don't have it... +// Experimental: POPULATE should work faster? #ifdef MAP_NOSYNC -#define MF_MMAP_OPTION (MAP_NOSYNC|MAP_PRIVATE) +#define MF_MMAP_OPTION (MAP_NOSYNC|MAP_SHARED) +#elif defined(MAP_POPULATE) +#define MF_MMAP_OPTION (MAP_POPULATE|MAP_SHARED) #else -#define MF_MMAP_OPTION (MAP_PRIVATE) +#define MF_MMAP_OPTION (MAP_SHARED) #endif /* Developer's Guide |