532 static int
533 bucket_split(Bucket *self, int index, Bucket *next)
534 {
535 int next_size;
536
537 ASSERT(self->len > 1, "split of empty bucket", -1);
when considering range: 2 <= value <= 0x7fffffff
taking False path
538
539 if (index < 0 || index >= self->len)
when considering range: 0 <= value <= 0x7fffffff
taking False path
when taking True path
540 index = self->len / 2;
541
542 next_size = self->len - index;
543
544 next->keys = BTree_Malloc(sizeof(KEY_TYPE) * next_size);
545 if (!next->keys)
when treating unknown void * from src/BTrees/BucketTemplate.c:544 as non-NULL
taking False path
546 return -1;
547 memcpy(next->keys, self->keys + index, sizeof(KEY_TYPE) * next_size);
548 if (self->values) {
when treating unknown struct PyObject * * from src/BTrees/BucketTemplate.c:548 as non-NULL
taking True path
549 next->values = BTree_Malloc(sizeof(VALUE_TYPE) * next_size);
550 if (!next->values) {
when treating unknown void * from src/BTrees/BucketTemplate.c:549 as non-NULL
taking False path
551 free(next->keys);
552 next->keys = NULL;
553 return -1;
554 }
555 memcpy(next->values, self->values + index,
556 sizeof(VALUE_TYPE) * next_size);
557 }
558 next->size = next_size;
559 next->len = next_size;
560 self->len = index;
561
562 next->next = self->next;
563
564 Py_INCREF(next);
ob_refcnt is now refs: 1 + N where N >= 1
565 self->next = next;
566
567 if (PER_CHANGED(self) < 0)
when treating unknown struct cPersistenceCAPIstruct * from src/persistent/cPersistence.h:112 as non-NULL
calling unknown int (*) (struct cPersistentObject *) from src/BTrees/BucketTemplate.c:567
when considering range: -0x80000000 <= value <= -1
taking True path
568 return -1;
569
570 return 0;
571 }
ob_refcnt of '*next' is 1 too high
was expecting final ob_refcnt to be N + 0 (for some unknown N)
but final ob_refcnt is N + 1
found 7 similar trace(s) to this