Merge moonlight.home:/home/tomash/src/mysql_ab/mysql-5.0
into moonlight.home:/home/tomash/src/mysql_ab/mysql-5.0-bug23443
This commit is contained in:
commit
21311e992d
@ -76,7 +76,7 @@ int hp_get_new_block(HP_BLOCK *block, ulong *alloc_length)
|
|||||||
and my_default_record_cache_size we get about 1/128 unused memory.
|
and my_default_record_cache_size we get about 1/128 unused memory.
|
||||||
*/
|
*/
|
||||||
*alloc_length=sizeof(HP_PTRS)*i+block->records_in_block* block->recbuffer;
|
*alloc_length=sizeof(HP_PTRS)*i+block->records_in_block* block->recbuffer;
|
||||||
if (!(root=(HP_PTRS*) my_malloc(*alloc_length,MYF(0))))
|
if (!(root=(HP_PTRS*) my_malloc(*alloc_length,MYF(MY_WME))))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
if (i == 0)
|
if (i == 0)
|
||||||
|
@ -68,11 +68,17 @@ int heap_write(HP_INFO *info, const byte *record)
|
|||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
|
|
||||||
err:
|
err:
|
||||||
|
if (my_errno == HA_ERR_FOUND_DUPP_KEY)
|
||||||
DBUG_PRINT("info",("Duplicate key: %d", keydef - share->keydef));
|
DBUG_PRINT("info",("Duplicate key: %d", keydef - share->keydef));
|
||||||
info->errkey= keydef - share->keydef;
|
info->errkey= keydef - share->keydef;
|
||||||
if (keydef->algorithm == HA_KEY_ALG_BTREE)
|
/*
|
||||||
|
We don't need to delete non-inserted key from rb-tree. Also, if
|
||||||
|
we got ENOMEM, the key wasn't inserted, so don't try to delete it
|
||||||
|
either. Otherwise for HASH index on HA_ERR_FOUND_DUPP_KEY the key
|
||||||
|
was inserted and we have to delete it.
|
||||||
|
*/
|
||||||
|
if (keydef->algorithm == HA_KEY_ALG_BTREE || my_errno == ENOMEM)
|
||||||
{
|
{
|
||||||
/* we don't need to delete non-inserted key from rb-tree */
|
|
||||||
keydef--;
|
keydef--;
|
||||||
}
|
}
|
||||||
while (keydef >= share->keydef)
|
while (keydef >= share->keydef)
|
||||||
|
@ -3663,8 +3663,9 @@ update_hash(user_var_entry *entry, bool set_null, void *ptr, uint length,
|
|||||||
char *pos= (char*) entry+ ALIGN_SIZE(sizeof(user_var_entry));
|
char *pos= (char*) entry+ ALIGN_SIZE(sizeof(user_var_entry));
|
||||||
if (entry->value == pos)
|
if (entry->value == pos)
|
||||||
entry->value=0;
|
entry->value=0;
|
||||||
if (!(entry->value=(char*) my_realloc(entry->value, length,
|
entry->value= (char*) my_realloc(entry->value, length,
|
||||||
MYF(MY_ALLOW_ZERO_PTR))))
|
MYF(MY_ALLOW_ZERO_PTR | MY_WME));
|
||||||
|
if (!entry->value)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user