@@ -45,6 +45,12 @@ int mi_delete(MI_INFO *info,const byte *record)
4545
4646 /* Test if record is in datafile */
4747
48+ DBUG_EXECUTE_IF ("myisam_pretend_crashed_table_on_usage" ,
49+ mi_print_error (info , HA_ERR_CRASHED );
50+ DBUG_RETURN (my_errno = HA_ERR_CRASHED ););
51+ DBUG_EXECUTE_IF ("my_error_test_undefined_error" ,
52+ mi_print_error (info , INT_MAX );
53+ DBUG_RETURN (my_errno = INT_MAX ););
4854 if (!(info -> update & HA_STATE_AKTIV ))
4955 {
5056 DBUG_RETURN (my_errno = HA_ERR_KEY_NOT_FOUND ); /* No database read */
@@ -109,13 +115,19 @@ int mi_delete(MI_INFO *info,const byte *record)
109115 mi_sizestore (lastpos ,info -> lastpos );
110116 myisam_log_command (MI_LOG_DELETE ,info ,(byte * ) lastpos , sizeof (lastpos ),0 );
111117 if (save_errno != HA_ERR_RECORD_CHANGED )
118+ {
119+ mi_print_error (info , HA_ERR_CRASHED );
112120 mi_mark_crashed (info ); /* mark table crashed */
121+ }
113122 VOID (_mi_writeinfo (info ,WRITEINFO_UPDATE_KEYFILE ));
114123 info -> update |=HA_STATE_WRITTEN ; /* Buffer changed */
115124 allow_break (); /* Allow SIGHUP & SIGINT */
116125 my_errno = save_errno ;
117126 if (save_errno == HA_ERR_KEY_NOT_FOUND )
127+ {
128+ mi_print_error (info , HA_ERR_CRASHED );
118129 my_errno = HA_ERR_CRASHED ;
130+ }
119131
120132 DBUG_RETURN (my_errno );
121133} /* mi_delete */
@@ -142,6 +154,7 @@ static int _mi_ck_real_delete(register MI_INFO *info, MI_KEYDEF *keyinfo,
142154
143155 if ((old_root = * root ) == HA_OFFSET_ERROR )
144156 {
157+ mi_print_error (info , HA_ERR_CRASHED );
145158 DBUG_RETURN (my_errno = HA_ERR_CRASHED );
146159 }
147160 if (!(root_buff = (uchar * ) my_alloca ((uint ) keyinfo -> block_length +
@@ -253,7 +266,9 @@ static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
253266 my_off_t root ;
254267 uchar * kpos = keypos ;
255268
256- tmp_key_length = (* keyinfo -> get_key )(keyinfo ,nod_flag ,& kpos ,lastkey );
269+ if (!(tmp_key_length = (* keyinfo -> get_key )(keyinfo ,nod_flag ,& kpos ,lastkey ))
270+ && (my_errno == HA_ERR_CRASHED ))
271+ mi_print_error (info , HA_ERR_CRASHED );
257272 root = _mi_dpos (info ,nod_flag ,kpos );
258273 if (subkeys == -1 )
259274 {
@@ -302,6 +317,7 @@ static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
302317 if (!nod_flag )
303318 {
304319 DBUG_PRINT ("error" ,("Didn't find key" ));
320+ mi_print_error (info , HA_ERR_CRASHED );
305321 my_errno = HA_ERR_CRASHED ; /* This should newer happend */
306322 goto err ;
307323 }
@@ -317,6 +333,8 @@ static int d_search(register MI_INFO *info, register MI_KEYDEF *keyinfo,
317333 & next_block );
318334 if (tmp == 0 )
319335 {
336+ if (my_errno == HA_ERR_CRASHED )
337+ mi_print_error (info , HA_ERR_CRASHED );
320338 DBUG_PRINT ("exit" ,("Return: %d" ,0 ));
321339 DBUG_RETURN (0 );
322340 }
@@ -473,6 +491,8 @@ static int del(register MI_INFO *info, register MI_KEYDEF *keyinfo, uchar *key,
473491 (info -> quick_mode ? MI_MIN_KEYBLOCK_LENGTH :
474492 (uint ) keyinfo -> underflow_block_length ));
475493err :
494+ if (my_errno == HA_ERR_CRASHED )
495+ mi_print_error (info , HA_ERR_CRASHED );
476496 DBUG_RETURN (-1 );
477497} /* del */
478498
@@ -562,7 +582,11 @@ static int underflow(register MI_INFO *info, register MI_KEYDEF *keyinfo,
562582 s_length = remove_key (keyinfo ,key_reflength ,keypos ,anc_key ,
563583 anc_buff + anc_length ,(my_off_t * ) 0 );
564584 if (!s_length )
585+ {
586+ if (my_errno == HA_ERR_CRASHED )
587+ mi_print_error (info , HA_ERR_CRASHED );
565588 goto err ;
589+ }
566590 anc_length -= s_length ;
567591 mi_putint (anc_buff ,anc_length ,key_reflength );
568592
@@ -671,7 +695,11 @@ static int underflow(register MI_INFO *info, register MI_KEYDEF *keyinfo,
671695 s_length = remove_key (keyinfo ,key_reflength ,keypos ,anc_key ,
672696 anc_buff + anc_length ,(my_off_t * ) 0 );
673697 if (!s_length )
698+ {
699+ if (my_errno == HA_ERR_CRASHED )
700+ mi_print_error (info , HA_ERR_CRASHED );
674701 goto err ;
702+ }
675703 anc_length -= s_length ;
676704 mi_putint (anc_buff ,anc_length ,key_reflength );
677705
@@ -732,6 +760,8 @@ static int underflow(register MI_INFO *info, register MI_KEYDEF *keyinfo,
732760 goto err ;
733761 DBUG_RETURN (anc_length <= (uint ) keyinfo -> block_length /2 );
734762err :
763+ if (my_errno == HA_ERR_CRASHED )
764+ mi_print_error (info , HA_ERR_CRASHED );
735765 DBUG_RETURN (-1 );
736766} /* underflow */
737767
0 commit comments