Loading...
--- /dev/null
+++ Libc/Libc-763.11/db/mpool/FreeBSD/mpool.c.patch
@@ -0,0 +1,50 @@
+--- mpool.c.orig 2009-11-06 12:36:03.000000000 -0800
++++ mpool.c 2009-11-06 12:36:15.000000000 -0800
+@@ -119,7 +119,7 @@ mpool_new(mp, pgnoaddr)
+
+ if (mp->npages == MAX_PAGE_NUMBER) {
+ (void)fprintf(stderr, "mpool_new: page allocation overflow.\n");
+- abort();
++ LIBC_ABORT("page allocation overflow");
+ }
+ #ifdef STATISTICS
+ ++mp->pagenew;
+@@ -170,7 +170,7 @@ mpool_get(MPOOL *mp, pgno_t pgno,
+ if (bp->flags & MPOOL_PINNED) {
+ (void)fprintf(stderr,
+ "mpool_get: page %d already pinned\n", bp->pgno);
+- abort();
++ LIBC_ABORT("page %d already pinned", bp->pgno);
+ }
+ #endif
+ /*
+@@ -241,7 +241,7 @@ mpool_put(MPOOL *mp, void *page, u_int f
+ if (!(bp->flags & MPOOL_PINNED)) {
+ (void)fprintf(stderr,
+ "mpool_put: page %d not pinned\n", bp->pgno);
+- abort();
++ LIBC_ABORT("page %d not pinned", bp->pgno);
+ }
+ #endif
+ bp->flags &= ~MPOOL_PINNED;
+@@ -280,10 +280,16 @@ mpool_sync(MPOOL *mp)
+ BKT *bp;
+
+ /* Walk the lru chain, flushing any dirty pages to disk. */
+- TAILQ_FOREACH(bp, &mp->lqh, q)
+- if (bp->flags & MPOOL_DIRTY &&
+- mpool_write(mp, bp) == RET_ERROR)
+- return (RET_ERROR);
++ TAILQ_FOREACH(bp, &mp->lqh, q) {
++ if (bp->flags & MPOOL_DIRTY)
++ if (mpool_write(mp, bp) == RET_ERROR) {
++ return (RET_ERROR);
++ } else {
++ /* 4874757: Re-run through the user's pgin filter. */
++ if (mp->pgin != NULL)
++ (mp->pgin)(mp->pgcookie, bp->pgno, bp->page);
++ }
++ }
+
+ /* Sync the file descriptor. */
+ return (_fsync(mp->fd) ? RET_ERROR : RET_SUCCESS);