summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2008-01-10 00:11:05 +0800
committerpiaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2008-01-10 00:11:05 +0800
commit603d2ded05450918e5cd857a4379c4715a76ba43 (patch)
treee68918009a82031ca4c8a463f944996bdbe541d0
parent7b794f4dfbfe35135fffc78ed5187bbfa5ac1436 (diff)
downloadpttbbs-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.c9
-rw-r--r--mbbsd/mbbsd.c29
-rw-r--r--mbbsd/pmore.c7
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