From owner-freebsd-ports-bugs@FreeBSD.ORG Tue May 26 12:40:02 2009 Return-Path: Delivered-To: freebsd-ports-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 56E7B106566B for ; Tue, 26 May 2009 12:40:02 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 346E08FC1A for ; Tue, 26 May 2009 12:40:02 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.14.3/8.14.3) with ESMTP id n4QCe2E6056663 for ; Tue, 26 May 2009 12:40:02 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.3/8.14.3/Submit) id n4QCe28b056662; Tue, 26 May 2009 12:40:02 GMT (envelope-from gnats) Resent-Date: Tue, 26 May 2009 12:40:02 GMT Resent-Message-Id: <200905261240.n4QCe28b056662@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Gea-Suan Lin Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1D52D1065670 for ; Tue, 26 May 2009 12:35:34 +0000 (UTC) (envelope-from gslin@colo-p.gslin.org) Received: from colo-p.gslin.org (60-199-248-145.static.tfn.net.tw [60.199.248.145]) by mx1.freebsd.org (Postfix) with ESMTP id AF0948FC18 for ; Tue, 26 May 2009 12:35:32 +0000 (UTC) (envelope-from gslin@colo-p.gslin.org) Received: by colo-p.gslin.org (Postfix, from userid 1000) id 2408F7E81B; Tue, 26 May 2009 20:35:31 +0800 (CST) Message-Id: <20090526123531.2408F7E81B@colo-p.gslin.org> Date: Tue, 26 May 2009 20:35:31 +0800 (CST) From: Gea-Suan Lin To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Cc: gslin@gslin.org Subject: ports/134957: [MAINTAINER] databases/db47: update to 4.7.25.4 X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 26 May 2009 12:40:02 -0000 >Number: 134957 >Category: ports >Synopsis: [MAINTAINER] databases/db47: update to 4.7.25.4 >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: maintainer-update >Submitter-Id: current-users >Arrival-Date: Tue May 26 12:40:01 UTC 2009 >Closed-Date: >Last-Modified: >Originator: Gea-Suan Lin >Release: FreeBSD 7.1-STABLE i386 >Organization: >Environment: System: FreeBSD colo-p.gslin.org 7.1-STABLE FreeBSD 7.1-STABLE #0: Sat Jan 31 21:46:23 UTC 2009 >Description: - Update to 4.7.25.4 - Since patches of official site (oracle.com) are not consistent, I put modified version into PATCHDIR. Added file(s): - files/patch.4.7.25.4 Generated with FreeBSD Port Tools 0.77 >How-To-Repeat: >Fix: --- db47-4.7.25.4.patch begins here --- diff -ruN --exclude=CVS /usr/ports/databases/db47/Makefile /home/staff/gslin/work/ports/db47/Makefile --- /usr/ports/databases/db47/Makefile 2009-03-24 03:10:13.000000000 +0800 +++ /home/staff/gslin/work/ports/db47/Makefile 2009-05-26 20:31:08.000000000 +0800 @@ -6,7 +6,7 @@ # PORTNAME= db47 -PORTVERSION= 4.7.25.3 +PORTVERSION= 4.7.25.4 CATEGORIES= databases MASTER_SITES= http://download-west.oracle.com/berkeley-db/ \ http://download-east.oracle.com/berkeley-db/ \ @@ -20,12 +20,15 @@ PATCH_DIST_STRIP= -d .. --ignore-whitespace # * patch.4.7.25.1: ----------------------------------------------------------- # # [#16406] Replication clients should be able to open a sequence. -# # * patch.4.7.25.2: ----------------------------------------------------------- # # [#16415] DB_ENV->lock_get may self deadlock if user defined locks # are used and there is only one lock partition defined. # * patch.4.7.25.3: ----------------------------------------------------------- # # [#16541] Fix for dd segfaults. +# * patch.4.7.25.4: ----------------------------------------------------------- +# # [#16299] Fix a bug which could cause a SEGV in __repmgr_available_site if a +# site becomes master after winning an election but is still +# processing client messages. # I allow matthias.andree@gmx.de and all freebsd committer to do changes # to this package. diff -ruN --exclude=CVS /usr/ports/databases/db47/files/patch.4.7.25.4 /home/staff/gslin/work/ports/db47/files/patch.4.7.25.4 --- /usr/ports/databases/db47/files/patch.4.7.25.4 1970-01-01 08:00:00.000000000 +0800 +++ /home/staff/gslin/work/ports/db47/files/patch.4.7.25.4 2009-05-26 20:29:17.000000000 +0800 @@ -0,0 +1,183 @@ +*** dbinc/repmgr.h.orig 2009-05-04 10:33:55.000000000 -0400 +--- dbinc/repmgr.h 2009-05-04 10:27:26.000000000 -0400 +*************** +*** 374,379 **** +--- 374,380 ---- + #define SITE_FROM_EID(eid) (&db_rep->sites[eid]) + #define EID_FROM_SITE(s) ((int)((s) - (&db_rep->sites[0]))) + #define IS_VALID_EID(e) ((e) >= 0) ++ #define IS_KNOWN_REMOTE_SITE(e) ((e) >= 0 && ((u_int)(e)) < db_rep->site_cnt) + #define SELF_EID INT_MAX + + #define IS_PEER_POLICY(p) ((p) == DB_REPMGR_ACKS_ALL_PEERS || \ +*** cvotn/rep/rep_elect.c.orig 2009-05-04 10:35:50.000000000 -0400 +--- cvotn/rep/rep_elect.c 2009-05-04 10:31:24.000000000 -0400 +*************** +*** 33,39 **** + static int __rep_fire_elected __P((ENV *, REP *, u_int32_t)); + static void __rep_elect_master __P((ENV *, REP *)); + static int __rep_tally __P((ENV *, REP *, int, u_int32_t *, u_int32_t, roff_t)); +! static int __rep_wait __P((ENV *, db_timeout_t *, int *, int, u_int32_t)); + + /* + * __rep_elect -- +--- 33,39 ---- + static int __rep_fire_elected __P((ENV *, REP *, u_int32_t)); + static void __rep_elect_master __P((ENV *, REP *)); + static int __rep_tally __P((ENV *, REP *, int, u_int32_t *, u_int32_t, roff_t)); +! static int __rep_wait __P((ENV *, db_timeout_t *, int, u_int32_t)); + + /* + * __rep_elect -- +*************** +*** 55,61 **** + ENV *env; + LOG *lp; + REP *rep; +! int done, eid, elected, full_elect, locked, in_progress, need_req; + int ret, send_vote, t_ret; + u_int32_t ack, ctlflags, egen, nsites, orig_tally, priority, realpri; + u_int32_t tiebreaker; +--- 55,61 ---- + ENV *env; + LOG *lp; + REP *rep; +! int done, elected, full_elect, locked, in_progress, need_req; + int ret, send_vote, t_ret; + u_int32_t ack, ctlflags, egen, nsites, orig_tally, priority, realpri; + u_int32_t tiebreaker; +*************** +*** 181,188 **** + REP_SYSTEM_UNLOCK(env); + (void)__rep_send_message(env, DB_EID_BROADCAST, + REP_MASTER_REQ, NULL, NULL, 0, 0); +! ret = __rep_wait(env, &to, &eid, +! 0, REP_F_EPHASE0); + REP_SYSTEM_LOCK(env); + F_CLR(rep, REP_F_EPHASE0); + switch (ret) { +--- 181,187 ---- + REP_SYSTEM_UNLOCK(env); + (void)__rep_send_message(env, DB_EID_BROADCAST, + REP_MASTER_REQ, NULL, NULL, 0, 0); +! ret = __rep_wait(env, &to, 0, REP_F_EPHASE0); + REP_SYSTEM_LOCK(env); + F_CLR(rep, REP_F_EPHASE0); + switch (ret) { +*************** +*** 286,296 **** + REP_SYSTEM_LOCK(env); + goto vote; + } +! ret = __rep_wait(env, &to, &eid, full_elect, REP_F_EPHASE1); + switch (ret) { + case 0: + /* Check if election complete or phase complete. */ +! if (eid != DB_EID_INVALID && !IN_ELECTION(rep)) { + RPRINT(env, DB_VERB_REP_ELECT, + (env, "Ended election phase 1")); + goto edone; +--- 285,295 ---- + REP_SYSTEM_LOCK(env); + goto vote; + } +! ret = __rep_wait(env, &to, full_elect, REP_F_EPHASE1); + switch (ret) { + case 0: + /* Check if election complete or phase complete. */ +! if (!IN_ELECTION(rep)) { + RPRINT(env, DB_VERB_REP_ELECT, + (env, "Ended election phase 1")); + goto edone; +*************** +*** 398,412 **** + REP_SYSTEM_LOCK(env); + goto i_won; + } +! ret = __rep_wait(env, &to, &eid, full_elect, REP_F_EPHASE2); + RPRINT(env, DB_VERB_REP_ELECT, + (env, "Ended election phase 2 %d", ret)); + switch (ret) { + case 0: +! if (eid != DB_EID_INVALID) +! goto edone; +! ret = DB_REP_UNAVAIL; +! break; + case DB_REP_EGENCHG: + if (to > timeout) + to = timeout; +--- 397,408 ---- + REP_SYSTEM_LOCK(env); + goto i_won; + } +! ret = __rep_wait(env, &to, full_elect, REP_F_EPHASE2); + RPRINT(env, DB_VERB_REP_ELECT, + (env, "Ended election phase 2 %d", ret)); + switch (ret) { + case 0: +! goto edone; + case DB_REP_EGENCHG: + if (to > timeout) + to = timeout; +*************** +*** 1050,1062 **** + ENV *env; + REP *rep; + { +- /* +- * We often come through here twice, sometimes even more. We mustn't +- * let the redundant calls affect stats counting. But rep_elect relies +- * on this first part for setting eidp. +- */ +- rep->master_id = rep->eid; +- + if (F_ISSET(rep, REP_F_MASTERELECT | REP_F_MASTER)) { + /* We've been through here already; avoid double counting. */ + return; +--- 1046,1051 ---- +*************** +*** 1093,1102 **** + (timeout > 5000000) ? 500000 : ((timeout >= 10) ? timeout / 10 : 1); + + static int +! __rep_wait(env, timeoutp, eidp, full_elect, flags) + ENV *env; + db_timeout_t *timeoutp; +! int *eidp, full_elect; + u_int32_t flags; + { + DB_REP *db_rep; +--- 1082,1091 ---- + (timeout > 5000000) ? 500000 : ((timeout >= 10) ? timeout / 10 : 1); + + static int +! __rep_wait(env, timeoutp, full_elect, flags) + ENV *env; + db_timeout_t *timeoutp; +! int full_elect; + u_int32_t flags; + { + DB_REP *db_rep; +*************** +*** 1174,1180 **** + F_CLR(rep, REP_F_EGENUPDATE); + ret = DB_REP_EGENCHG; + } else if (phase_over) { +- *eidp = rep->master_id; + done = 1; + ret = 0; + } +--- 1163,1168 ---- +*** cvotn/repmgr/repmgr_net.c.orig 2009-05-04 10:34:46.000000000 -0400 +--- cvotn/repmgr/repmgr_net.c 2009-05-04 10:27:26.000000000 -0400 +*************** +*** 100,105 **** +--- 100,107 ---- + control, rec, &nsites_sent, &npeers_sent)) != 0) + goto out; + } else { ++ DB_ASSERT(env, IS_KNOWN_REMOTE_SITE(eid)); ++ + /* + * If this is a request that can be sent anywhere, then see if + * we can send it to our peer (to save load on the master), but --- db47-4.7.25.4.patch ends here --- >Release-Note: >Audit-Trail: >Unformatted: