diff options
-rwxr-xr-x | BitKeeper/triggers/post-commit | 3 | ||||
-rw-r--r-- | sql/handler.cc | 13 |
2 files changed, 11 insertions, 5 deletions
diff --git a/BitKeeper/triggers/post-commit b/BitKeeper/triggers/post-commit index d19c724268c..fe263b79325 100755 --- a/BitKeeper/triggers/post-commit +++ b/BitKeeper/triggers/post-commit @@ -27,6 +27,7 @@ then fi CHANGESET=`bk -R prs -r+ -h -d':P:::I:' ChangeSet` +CSETKEY=`bk -R prs -r+ -h -d':KEY:' ChangeSet` BUG=`bk -R prs -r+ -h -d':C:' ChangeSet | sed -ne 's/^.*[Bb][Uu][Gg] *# *\([0-9][0-9]*\).*$/\1/p'` WL=`bk -R prs -r+ -h -d':C:' ChangeSet | sed -ne 's/^.*[Ww][Ll] *# *\([0-9][0-9]*\).*$/ WL#\1/p'` @@ -52,6 +53,7 @@ List-ID: <bk.mysql-$VERSION> From: $FROM To: $TO Subject: bk commit - $VERSION tree ($CHANGESET)${BS}${WL} +X-CSetKey: <$CSETKEY> $BH EOF bk changes -v -r+ @@ -68,6 +70,7 @@ List-ID: <bk.mysql-$VERSION> From: $FROM To: $INTERNALS Subject: bk commit into $VERSION tree ($CHANGESET)$BS +X-CSetKey: <$CSETKEY> $BH Below is the list of changes that have just been committed into a local $VERSION repository of $USER. When $USER does a push these changes will diff --git a/sql/handler.cc b/sql/handler.cc index 7cd2fd303f0..785070176cb 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -505,10 +505,16 @@ void ha_close_connection(THD* thd) "beginning of transaction" and "beginning of statement"). Only storage engines registered for the transaction/statement will know when to commit/rollback it. + + NOTE + trans_register_ha is idempotent - storage engine may register many + times per transaction. + */ void trans_register_ha(THD *thd, bool all, handlerton *ht_arg) { THD_TRANS *trans; + handlerton **ht; DBUG_ENTER("trans_register_ha"); DBUG_PRINT("enter",("%s", all ? "all" : "stmt")); @@ -520,15 +526,12 @@ void trans_register_ha(THD *thd, bool all, handlerton *ht_arg) else trans= &thd->transaction.stmt; - handlerton **ht=trans->ht; - while (*ht) - { + for (ht=trans->ht; *ht; ht++) if (*ht == ht_arg) DBUG_VOID_RETURN; /* already registered, return */ - ht++; - } trans->ht[trans->nht++]=ht_arg; + DBUG_ASSERT(*ht == ht_arg); trans->no_2pc|=(ht_arg->prepare==0); if (thd->transaction.xid.is_null()) thd->transaction.xid.set(thd->query_id); |