RPM Package Manager, CVS Repository http://rpm5.org/cvs/ ____________________________________________________________________________
Server: rpm5.org Name: Jeff Johnson Root: /v/rpm/cvs Email: j...@rpm5.org Module: rpm Date: 30-Apr-2010 17:07:17 Branch: HEAD Handle: 2010043015071601 Modified files: rpm CHANGES rpm/rpmdb db3.c rpmdb.c Log: - rpmdb: fix: replace assert failures with RPMRC_FAIL returns. - dbi: rework the error message to supply copious debug details. - dbi: fix: --import as non-root assert failure. Summary: Revision Changes Path 1.3342 +3 -0 rpm/CHANGES 1.152 +15 -10 rpm/rpmdb/db3.c 1.387 +28 -18 rpm/rpmdb/rpmdb.c ____________________________________________________________________________ patch -p0 <<'@@ .' Index: rpm/CHANGES ============================================================================ $ cvs diff -u -r1.3341 -r1.3342 CHANGES --- rpm/CHANGES 30 Apr 2010 00:42:02 -0000 1.3341 +++ rpm/CHANGES 30 Apr 2010 15:07:16 -0000 1.3342 @@ -1,5 +1,8 @@ 5.2b1 -> 5.3a1 + - jbj: rpmdb: fix: replace assert failures with RPMRC_FAIL returns. + - jbj: dbi: rework the error message to supply copious debug details. + - jbj: dbi: fix: --import as non-root assert failure. - jbj: DB_CONFIG: fix: add mutex_set_max 8000. better scaling needed, todo++. - jbj: beecrypt: permit --with-beecrypt=internal (w manual checkout/autogen) - jbj: resurrect "make dist". @@ . patch -p0 <<'@@ .' Index: rpm/rpmdb/db3.c ============================================================================ $ cvs diff -u -r1.151 -r1.152 db3.c --- rpm/rpmdb/db3.c 2 Apr 2010 12:30:10 -0000 1.151 +++ rpm/rpmdb/db3.c 30 Apr 2010 15:07:17 -0000 1.152 @@ -498,27 +498,26 @@ #undef _ENTRY /*...@-globuse -mustmod @*/ /* FIX: rpmError not annotated yet. */ -static int cvtdberr(/*...@unused@*/ dbiIndex dbi, const char * msg, - int error, int printit) +static int Xcvtdberr(/*...@unused@*/ dbiIndex dbi, const char * msg, + int error, int printit, + const char * func, const char * fn, unsigned ln) /*...@globals fileSystem @*/ /*...@modifies fileSystem @*/ { int rc = error; if (printit && rc) { - /*...@-moduncon@*/ /* FIX: annotate db3 methods */ - if (msg) - rpmlog(RPMLOG_ERR, _("db%d error(%d) from %s: %s\n"), - DB_VERSION_MAJOR, rc, msg, db_strerror(error)); - else - rpmlog(RPMLOG_ERR, _("db%d error(%d): %s\n"), - DB_VERSION_MAJOR, rc, db_strerror(error)); - /*...@=moduncon@*/ +/*...@-moduncon@*/ /* FIX: annotate db3 methods */ + rpmlog(RPMLOG_ERR, "%s:%s:%u: %s(%d): %s\n", + func, fn, ln, msg, rc, db_strerror(error)); +/*...@=moduncon@*/ } return rc; } /*...@=globuse =mustmod @*/ +#define cvtdberr(_dbi, _msg, _error, _printit) \ + Xcvtdberr(_dbi, _msg, _error, _printit, __FUNCTION__, __FILE__, __LINE__) /** * Return (possibly renamed) tagName. Handles arbitrary tags. @@ -2552,10 +2551,16 @@ xx = seqid_init(dbi,(const char *)&u, sizeof(u), &dbi->dbi_seq); else xx = seqid_init(dbi, dbi->dbi_seq_id, 0, &dbi->dbi_seq); + if (xx) { + (void) db3close(dbi, 0); + dbi = NULL; + if (dbip) *dbip = dbi; + } } } else { (void) db3close(dbi, 0); dbi = NULL; + if (dbip) *dbip = dbi; } urlfn = _free(urlfn); @@ . patch -p0 <<'@@ .' Index: rpm/rpmdb/rpmdb.c ============================================================================ $ cvs diff -u -r1.386 -r1.387 rpmdb.c --- rpm/rpmdb/rpmdb.c 6 Mar 2010 16:20:46 -0000 1.386 +++ rpm/rpmdb/rpmdb.c 30 Apr 2010 15:07:17 -0000 1.387 @@ -2538,11 +2538,11 @@ sigset_t signalMask; dbiIndex dbi; size_t dbix; - int rc = 0; + int rc = RPMRC_FAIL; /* XXX RPMRC */ int xx; if (db == NULL) - return 0; + return RPMRC_OK; /* XXX RPMRC */ /* Retrieve header for use by associated secondary index callbacks. */ { rpmmi mi; @@ -2556,7 +2556,7 @@ if (h == NULL) { rpmlog(RPMLOG_ERR, _("%s: cannot read header at 0x%x\n"), "rpmdbRemove", (unsigned)hdrNum); - return 1; + return RPMRC_FAIL; /* XXX RPMRC */ } he->tag = RPMTAG_NVRA; @@ -2587,8 +2587,10 @@ /* Don't bother if tag is not present. */ if (!headerGet(h, he, 0)) /*...@switchbreak@*/ break; + dbi = dbiOpen(db, he->tag, 0); -assert(dbi != NULL); /* XXX sanity */ + if (dbi == NULL) goto exit; + he->p.ptr = _free(he->p.ptr); /*...@switchbreak@*/ break; case RPMDBI_AVAILABLE: /* Filter out temporary databases */ @@ -2609,7 +2611,8 @@ db->db_h = headerLink(h); dbi = dbiOpen(db, he->tag, 0); -assert(dbi != NULL); + if (dbi == NULL) goto exit; + rc = dbiCopen(dbi, dbiTxnid(dbi), &dbcursor, DB_WRITECURSOR); rc = dbiGet(dbi, dbcursor, &k, &v, DB_SET); if (!rc) @@ -2630,11 +2633,11 @@ /* Unreference header used by associated secondary index callbacks. */ (void) headerFree(h); h = NULL; + rc = RPMRC_OK; /* XXX RPMRC */ +exit: (void) unblockSignals(db, &signalMask); - - /* XXX return ret; */ - return 0; + return rc; } /* XXX install.c */ @@ -2645,11 +2648,11 @@ dbiIndex dbi; size_t dbix; uint32_t hdrNum = headerGetInstance(h); - int ret = 0; + int rc = RPMRC_FAIL; /* XXX RPMRC */ int xx; if (db == NULL) - return 0; + return RPMRC_OK; /* XXX RPMRC */ if (_rpmdb_debug) fprintf(stderr, "--> %s(%p, %u, %p, %p) h# %u\n", __FUNCTION__, db, (unsigned)iid, h, ts, (unsigned)hdrNum); @@ -2679,12 +2682,15 @@ /* Assign a primary Packages key for new Header's. */ if (hdrNum == 0) { int64_t seqno = 0; + dbi = dbiOpen(db, RPMDBI_SEQNO, 0); -assert(dbi != NULL); /* XXX sanity */ - if ((ret = dbiSeqno(dbi, &seqno, 0)) == 0) { + if (dbi == NULL) goto exit; + + if ((xx = dbiSeqno(dbi, &seqno, 0)) == 0) { hdrNum = seqno; (void) headerSetInstance(h, hdrNum); - } + } else + goto exit; } /* XXX ensure that the header instance is set persistently. */ @@ -2694,7 +2700,7 @@ } dbi = dbiOpen(db, RPMDBI_PACKAGES, 0); -assert(dbi != NULL); /* XXX sanity */ + if (dbi == NULL) goto exit; dbix = db->db_ndbi - 1; if (db->db_tags != NULL) @@ -2717,8 +2723,10 @@ /* Don't bother if tag is not present. */ if (!headerGet(h, he, 0)) /*...@switchbreak@*/ break; + dbi = dbiOpen(db, he->tag, 0); -assert(dbi != NULL); /* XXX sanity */ + if (dbi == NULL) goto exit; + he->p.ptr = _free(he->p.ptr); /*...@switchbreak@*/ break; case RPMDBI_AVAILABLE: /* Filter out temporary databases */ @@ -2745,7 +2753,8 @@ db->db_h = headerLink(h); dbi = dbiOpen(db, he->tag, 0); -assert(dbi != NULL); /* XXX sanity */ + if (dbi == NULL) goto exit; + xx = dbiCopen(dbi, dbiTxnid(dbi), &dbcursor, DB_WRITECURSOR); xx = dbiPut(dbi, dbcursor, &k, &v, DB_KEYLAST); xx = dbiCclose(dbi, dbcursor, DB_WRITECURSOR); @@ -2763,8 +2772,9 @@ } } while (dbix-- > 0); + rc = RPMRC_OK; /* XXX RPMRC */ +exit: (void) unblockSignals(db, &signalMask); - - return ret; + return rc; } @@ . ______________________________________________________________________ RPM Package Manager http://rpm5.org CVS Sources Repository rpm-cvs@rpm5.org