Bug #39300 low memory crash with create temporary table x select * from y
Submitted: 8 Sep 2008 8:54
Reporter: Shane Bester
Status: Analyzing
Category:Server: Federated Severity:S2 (Serious)
Version:5.0.66a OS:Any
Assigned to: Shane Bester Target Version:

[8 Sep 2008 8:54] Shane Bester
Description:
call stack:

mysqld-debug.exe!Field::eq_def(Field * field=0x00000000)  Line 7947
mysqld-debug.exe!create_tmp_field Line 9156
mysqld-debug.exe!create_table_from_items Line 3186
mysqld-debug.exe!select_create::prepare 
mysqld-debug.exe!JOIN::prepare
mysqld-debug.exe!mysql_select
mysqld-debug.exe!handle_select
mysqld-debug.exe!mysql_execute_command
mysqld-debug.exe!mysql_parse
mysqld-debug.exe!dispatch_command
mysqld-debug.exe!do_command
mysqld-debug.exe!handle_one_connection
mysqld-debug.exe!pthread_start
mysqld-debug.exe!_threadstart

How to repeat:
you have to start mysql like this:

mysqld-debug --console --safemalloc-mem-limit=15485760 --skip-grant-tables
--skip-name-resolve

notice the --safemalloc-mem-limit option will be used to fake an out of memory condition.
 testcase will be uploaded later.
[8 Sep 2008 9:40] Shane Bester
here's another call stack observed by same crash.   The problem is federated is pulling
entire resultset into memory, and somewhere not checking for OOM errors.

                                                             
mysqld-debug.exe!str_to_datetime                             
mysqld-debug.exe!Field_datetime::store                       
mysqld-debug.exe!ha_federated::convert_row_to_internal_format
mysqld-debug.exe!ha_federated::read_next                     
mysqld-debug.exe!ha_federated::rnd_next                      
mysqld-debug.exe!rr_sequential                               
mysqld-debug.exe!join_init_read_record                       
mysqld-debug.exe!sub_select                                  
mysqld-debug.exe!do_select                                   
mysqld-debug.exe!JOIN::exec                                  
mysqld-debug.exe!mysql_select                                
mysqld-debug.exe!handle_select                               
mysqld-debug.exe!mysql_execute_command                       
mysqld-debug.exe!mysql_parse                                 
mysqld-debug.exe!dispatch_command                            
mysqld-debug.exe!do_command                                  
mysqld-debug.exe!handle_one_connection                       
mysqld-debug.exe!pthread_start                               
mysqld-debug.exe!_threadstart