Skip to content

Commit

Permalink
Preview #21 snapshot: double-linked list splice operation corrections
Browse files Browse the repository at this point in the history
Old splice implementation would corrupt the list if neighbor items of the same list would be passed
  • Loading branch information
oleh-derevenko committed Sep 1, 2024
1 parent e1c6d0d commit 3473dc7
Show file tree
Hide file tree
Showing 38 changed files with 63 additions and 64 deletions.
2 changes: 1 addition & 1 deletion configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ AC_PREREQ([2.69])
AC_INIT([mutexgear],[0.1],[oleh.derevenko@gmail.com])
AC_LANG(C)

AC_COPYRIGHT([Copyright (C) 2020-2023, Oleh Derevenko <oleh.derevenko@gmail.com>])
AC_COPYRIGHT([Copyright (C) 2020-2024, Oleh Derevenko <oleh.derevenko@gmail.com>])
AC_REVISION([$Revision: 1.01 $])

MUTEXGEAR_VERSION=0.1
Expand Down
2 changes: 1 addition & 1 deletion include/mutexgear/_confvars.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down
16 changes: 7 additions & 9 deletions include/mutexgear/_llisttmpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down Expand Up @@ -364,22 +364,20 @@ _MUTEXGEAR_PURE_INLINE \
void _t_mutexgear_##t_prefix##list_spliceat(_t_mutexgear_##t_prefix##list_t *p_list_instance, _t_mutexgear_##t_prefix##item_t *p_insert_before_item, \
_t_mutexgear_##t_prefix##item_t *p_to_be_spliced_begin, _t_mutexgear_##t_prefix##item_t *p_to_be_spliced_end) \
{ \
if (p_to_be_spliced_begin != p_to_be_spliced_end) \
if (p_to_be_spliced_begin != p_to_be_spliced_end && p_insert_before_item != p_to_be_spliced_end) \
{ \
/* First, unlink the sequence from its host list (possibly, this list)... */ \
_t_mutexgear_##t_prefix##item_t *p_last_spliced_item = _t_mutexgear_##t_prefix##item_getprevious(p_to_be_spliced_end); \
_t__mutexgear_##t_prefix##item_setnext(p_last_spliced_item, p_insert_before_item); \
\
/* Save the "prev_item" pointer of the first item to be spliced as the former is going to be overwritten. */ \
_t_mutexgear_##t_prefix##item_t *p_one_before_first_spliced_item = _t_mutexgear_##t_prefix##item_getprevious(p_to_be_spliced_begin); \
\
_t__mutexgear_##t_prefix##item_setnext(p_one_before_first_spliced_item, p_to_be_spliced_end); \
_t__mutexgear_##t_prefix##item_setprevious(p_to_be_spliced_end, p_one_before_first_spliced_item); \
/* ... and only then retrieve the previous of p_insert_before_item (as it might have changed). */ \
_t_mutexgear_##t_prefix##item_t *p_insert_after_item = _t_mutexgear_##t_prefix##item_getprevious(p_insert_before_item); \
_t__mutexgear_##t_prefix##item_setnext(p_last_spliced_item, p_insert_before_item); \
_t__mutexgear_##t_prefix##item_setunsafeprevious(p_to_be_spliced_begin, p_insert_after_item); \
\
_t__mutexgear_##t_prefix##item_setprevious(p_insert_before_item, p_last_spliced_item); \
_t__mutexgear_##t_prefix##item_setnext(p_insert_after_item, p_to_be_spliced_begin); \
\
_t__mutexgear_##t_prefix##item_setnext(p_one_before_first_spliced_item, p_to_be_spliced_end); \
_t__mutexgear_##t_prefix##item_setprevious(p_to_be_spliced_end, p_one_before_first_spliced_item); \
} \
} \
\
Expand Down
2 changes: 1 addition & 1 deletion include/mutexgear/completion.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down
2 changes: 1 addition & 1 deletion include/mutexgear/completion.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down
2 changes: 1 addition & 1 deletion include/mutexgear/config.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down
2 changes: 1 addition & 1 deletion include/mutexgear/constants.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down
39 changes: 20 additions & 19 deletions include/mutexgear/dlps_list.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down Expand Up @@ -442,24 +442,25 @@ class dlps_list
private:
void SpliceRange(iterator itBeforeItem, iterator itRangeBegin, iterator itRangeEnd) noexcept
{
dlps_info *psiRangeBegin = &*itRangeBegin;
dlps_info *psiRangeEnd = &*itRangeEnd;
dlps_info *psiBeforeItem = &*itBeforeItem;

dlps_info *psiRangeLast = psiRangeEnd->m_psiPreviousItem;
psiRangeLast->m_psiNextItem = psiBeforeItem;

// Save the m_psiPreviousItem of the first item to be spliced as the pointer is going to be replaced.
dlps_info *psiOriginalRangePrevious = psiRangeBegin->m_psiPreviousItem;

dlps_info *psiAfterItem = psiBeforeItem->m_psiPreviousItem;
psiRangeBegin->m_psiPreviousItem = psiAfterItem;

psiBeforeItem->m_psiPreviousItem = psiRangeLast;
psiAfterItem->m_psiNextItem = psiRangeBegin;

psiOriginalRangePrevious->m_psiNextItem = psiRangeEnd;
psiRangeEnd->m_psiPreviousItem = psiOriginalRangePrevious;
if (itBeforeItem != itRangeEnd)
{
dlps_info *psiRangeBegin = &*itRangeBegin;
dlps_info *psiRangeEnd = &*itRangeEnd;
dlps_info *psiBeforeItem = &*itBeforeItem;

// First, unlink the sequence from its host list (possibly, this list)...
dlps_info *psiRangeLast = psiRangeEnd->m_psiPreviousItem;
dlps_info *psiOriginalRangePrevious = psiRangeBegin->m_psiPreviousItem;
psiOriginalRangePrevious->m_psiNextItem = psiRangeEnd;
psiRangeEnd->m_psiPreviousItem = psiOriginalRangePrevious;
// ... and only then retrieve the previous of psiBeforeItem (as it might have changed).
dlps_info *psiAfterItem = psiBeforeItem->m_psiPreviousItem;
psiRangeLast->m_psiNextItem = psiBeforeItem;
psiRangeBegin->m_psiPreviousItem = psiAfterItem;

psiBeforeItem->m_psiPreviousItem = psiRangeLast;
psiAfterItem->m_psiNextItem = psiRangeBegin;
}
}

private:
Expand Down
2 changes: 1 addition & 1 deletion include/mutexgear/dlpslist.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down
2 changes: 1 addition & 1 deletion include/mutexgear/dlralist.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down
2 changes: 1 addition & 1 deletion include/mutexgear/mutexgear.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down
2 changes: 1 addition & 1 deletion include/mutexgear/parent_wrapper.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down
2 changes: 1 addition & 1 deletion include/mutexgear/rwlock.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down
2 changes: 1 addition & 1 deletion include/mutexgear/shared_mutex.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down
2 changes: 1 addition & 1 deletion include/mutexgear/toggle.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down
2 changes: 1 addition & 1 deletion include/mutexgear/toggle.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down
2 changes: 1 addition & 1 deletion include/mutexgear/utility.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down
2 changes: 1 addition & 1 deletion include/mutexgear/wheel.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down
2 changes: 1 addition & 1 deletion include/mutexgear/wheel.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down
2 changes: 1 addition & 1 deletion src/completion.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down
2 changes: 1 addition & 1 deletion src/completion.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down
2 changes: 1 addition & 1 deletion src/dlralist.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down
2 changes: 1 addition & 1 deletion src/rwlock.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down
2 changes: 1 addition & 1 deletion src/toggle.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down
2 changes: 1 addition & 1 deletion src/utility.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down
2 changes: 1 addition & 1 deletion src/utility.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
/* THIS IS A PRE-RELEASE LIBRARY SNAPSHOT. */
/* AWAIT THE RELEASE AT https://mutexgear.com */
/* */
/* Copyright (c) 2016-2023 Oleh Derevenko. All rights are reserved. */
/* Copyright (c) 2016-2024 Oleh Derevenko. All rights are reserved. */
/* */
/* E-mail: oleh.derevenko@gmail.com */
/* Skype: oleh_derevenko */
Expand Down
Loading

0 comments on commit 3473dc7

Please sign in to comment.