-
- memcpy(newinfo+1, oldinfo+1, oldinfo->size);
-
- if (oldinfo->prev) oldinfo->prev->next = oldinfo->next;
- if (oldinfo->next) oldinfo->next->prev = oldinfo->prev;
-
+
+ VALGRIND_MALLOCLIKE_BLOCK((char *)newinfo + IDENT_MEM_TOP, size, IDENT_MEM_TOP, 0);
+
+ /* we need access to the old info redzone */
+ VALGRIND_MAKE_MEM_DEFINED(oldinfo, IDENT_MEM_TOP);
+
+ /* We need access to the new info redzone */
+ VALGRIND_MAKE_MEM_DEFINED(newinfo, IDENT_MEM_TOP);
+ memcpy((char *)(newinfo + 1), IDENT_MEM, IDENT_SIZE);
+ memcpy((char *)newinfo + IDENT_MEM_TOP, (char *)oldinfo + IDENT_MEM_TOP, oldinfo->size);
+ VALGRIND_MAKE_MEM_NOACCESS(newinfo, IDENT_MEM_TOP);
+
+ if (oldinfo->prev) {
+ /* just need access for a short period */
+ VALGRIND_MAKE_MEM_DEFINED(oldinfo->prev, IDENT_MEM_TOP);
+ oldinfo->prev->next = oldinfo->next;
+ /* don't need access anymore */
+ VALGRIND_MAKE_MEM_NOACCESS(oldinfo->prev, IDENT_MEM_TOP);
+ }
+
+ if (oldinfo->next) {
+ /* just need access for a short period */
+ VALGRIND_MAKE_MEM_DEFINED(oldinfo->next, IDENT_MEM_TOP);
+ oldinfo->next->prev = oldinfo->prev;
+ /* don't need access anymore */
+ VALGRIND_MAKE_MEM_NOACCESS(oldinfo->next, IDENT_MEM_TOP);
+ }
+