summaryrefslogtreecommitdiff
path: root/innobase/include
diff options
context:
space:
mode:
authorunknown <marko@hundin.mysql.fi>2005-04-27 12:28:44 +0300
committerunknown <marko@hundin.mysql.fi>2005-04-27 12:28:44 +0300
commit949112c12a2a74555c5049aa8b82cee87660cbb5 (patch)
treef5c1075fcd5b897aa5c2d97fe24ea10e85c5bba0 /innobase/include
parent4a3a46af13ae0703f590ac058fc1df61aeb946b6 (diff)
downloadmariadb-git-949112c12a2a74555c5049aa8b82cee87660cbb5.tar.gz
Fix bugs found in previous optimizations.
Make rec_get_deleted_flag() return zero/nonzero instead of FALSE/TRUE. innobase/btr/btr0btr.c: btr_page_get_sure_split_rec(): Fix bug caused by optimization (dereferencing null pointer in page_rec_is_supremum()) btr_page_insert_fits(): Correct a debug assertion. innobase/btr/btr0cur.c: Add debug assertions about page_rec_is_comp(). Add UNIV_LIKELY and UNIV_UNLIKELY hints. Note that rec_get_deleted_flag() returns zero/nonzero ulint instead of FALSE/TRUE ibool. innobase/include/page0page.ic: Move debug assertion to proper place. innobase/include/rem0rec.h: rec_get_deleted_flag(), rec_set_deleted_flag(): Make the flag zero/nonzero in order to avoid FALSE/TRUE normalization in every rec_get_deleted_flag() call. innobase/include/rem0rec.ic: rec_get_deleted_flag(), rec_set_deleted_flag(): Make the flag zero/nonzero in order to avoid FALSE/TRUE normalization in every rec_get_deleted_flag() call. innobase/rem/rem0rec.c: rec_init_offsets(): Fix bugs introduced in optimization. innobase/row/row0sel.c: Make debug assertion stricter. innobase/row/row0vers.c: Note that rec_get_deleted_flag() returns zero/nonzero ulint instead of FALSE/TRUE ibool.
Diffstat (limited to 'innobase/include')
-rw-r--r--innobase/include/page0page.ic2
-rw-r--r--innobase/include/rem0rec.h6
-rw-r--r--innobase/include/rem0rec.ic19
3 files changed, 13 insertions, 14 deletions
diff --git a/innobase/include/page0page.ic b/innobase/include/page0page.ic
index 8299d160b28..cef8f6a1b80 100644
--- a/innobase/include/page0page.ic
+++ b/innobase/include/page0page.ic
@@ -593,10 +593,10 @@ page_rec_set_next(
ut_ad(page_rec_check(rec));
ut_ad(!page_rec_is_supremum(rec));
- ut_ad(!page_rec_is_infimum(next));
page = ut_align_down(rec, UNIV_PAGE_SIZE);
if (next) {
+ ut_ad(!page_rec_is_infimum(next));
ut_a(page == ut_align_down(next, UNIV_PAGE_SIZE));
offs = (ulint) (next - page);
} else {
diff --git a/innobase/include/rem0rec.h b/innobase/include/rem0rec.h
index 3c150d6601d..bfb43847e39 100644
--- a/innobase/include/rem0rec.h
+++ b/innobase/include/rem0rec.h
@@ -162,10 +162,10 @@ rec_set_info_and_status_bits(
/**********************************************************
The following function tells if record is delete marked. */
UNIV_INLINE
-ibool
+ulint
rec_get_deleted_flag(
/*=================*/
- /* out: TRUE if delete marked */
+ /* out: nonzero if delete marked */
rec_t* rec, /* in: physical record */
ulint comp); /* in: nonzero=compact page format */
/**********************************************************
@@ -176,7 +176,7 @@ rec_set_deleted_flag(
/*=================*/
rec_t* rec, /* in: physical record */
ulint comp, /* in: nonzero=compact page format */
- ibool flag); /* in: TRUE if delete marked */
+ ulint flag); /* in: nonzero if delete marked */
/**********************************************************
The following function tells if a new-style record is a node pointer. */
UNIV_INLINE
diff --git a/innobase/include/rem0rec.ic b/innobase/include/rem0rec.ic
index 85e196bbcf8..3ada4100bd0 100644
--- a/innobase/include/rem0rec.ic
+++ b/innobase/include/rem0rec.ic
@@ -578,19 +578,21 @@ rec_set_info_and_status_bits(
/**********************************************************
The following function tells if record is delete marked. */
UNIV_INLINE
-ibool
+ulint
rec_get_deleted_flag(
/*=================*/
- /* out: TRUE if delete marked */
+ /* out: nonzero if delete marked */
rec_t* rec, /* in: physical record */
ulint comp) /* in: nonzero=compact page format */
{
if (UNIV_EXPECT(comp, REC_OFFS_COMPACT)) {
- return(0 != rec_get_bit_field_1(rec, REC_NEW_INFO_BITS,
- REC_INFO_DELETED_FLAG, REC_INFO_BITS_SHIFT));
+ return(UNIV_UNLIKELY(rec_get_bit_field_1(rec,
+ REC_NEW_INFO_BITS, REC_INFO_DELETED_FLAG,
+ REC_INFO_BITS_SHIFT)));
} else {
- return(0 != rec_get_bit_field_1(rec, REC_OLD_INFO_BITS,
- REC_INFO_DELETED_FLAG, REC_INFO_BITS_SHIFT));
+ return(UNIV_UNLIKELY(rec_get_bit_field_1(rec,
+ REC_OLD_INFO_BITS, REC_INFO_DELETED_FLAG,
+ REC_INFO_BITS_SHIFT)));
}
}
@@ -602,13 +604,10 @@ rec_set_deleted_flag(
/*=================*/
rec_t* rec, /* in: physical record */
ulint comp, /* in: nonzero=compact page format */
- ibool flag) /* in: TRUE if delete marked */
+ ulint flag) /* in: nonzero if delete marked */
{
ulint val;
- ut_ad(TRUE == 1);
- ut_ad(flag <= TRUE);
-
val = rec_get_info_bits(rec, comp);
if (flag) {