Commit 1eb5b28f authored by kroki/tomash@moonlight.home's avatar kroki/tomash@moonlight.home

Merge moonlight.home:/home/tomash/src/mysql_ab/mysql-4.1-bug23443

into  moonlight.home:/home/tomash/src/mysql_ab/mysql-5.0-bug23443
parents 7696592b 45e97620
...@@ -76,7 +76,7 @@ int hp_get_new_block(HP_BLOCK *block, ulong *alloc_length) ...@@ -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) ...@@ -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, ...@@ -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;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment