diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc
index 3137890f2ba37b827092b6b2f6fc165def49476f..5c827741e6d021698fe0e06aeea20bc87a30e964 100644
--- a/sql/sql_derived.cc
+++ b/sql/sql_derived.cc
@@ -220,10 +220,12 @@ static int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit,
       table->next= thd->derived_tables;
       thd->derived_tables= table;
     }
+  }
+  else
+    free_tmp_table(thd, table);
 
 exit:
-    delete derived_result;
-    lex->current_select= save_current_select;
-  }
+  delete derived_result;
+  lex->current_select= save_current_select;
   DBUG_RETURN(res);
 }
diff --git a/sql/sql_view.cc b/sql/sql_view.cc
index 67c7c39e2238909a0c24fc445234dc1d4dfa44b7..2b1971907b323533e0b5659a3274b57e80b6173f 100644
--- a/sql/sql_view.cc
+++ b/sql/sql_view.cc
@@ -339,8 +339,6 @@ static File_option view_parameters[]=
   FILE_OPTIONS_STRING}
 };
 
-static const uint required_view_parameters= 6;
-
 static LEX_STRING view_file_type[]= {{(char*)"VIEW", 4}};
 
 
@@ -604,8 +602,6 @@ mysql_make_view(File_parser *parser, TABLE_LIST *table)
     {
       /* move SP to main LEX */
       sp_merge_funs(old_lex, lex);
-      if (lex->spfuns.array.buffer)
-        hash_free(&lex->spfuns);
       if (old_lex->proc_table == 0 &&
           (old_lex->proc_table=
            (TABLE_LIST*)thd->calloc(sizeof(TABLE_LIST))) != 0)
@@ -619,6 +615,8 @@ mysql_make_view(File_parser *parser, TABLE_LIST *table)
         include_proc_table= 1;
       }
     }
+    if (lex->spfuns.array.buffer)
+      hash_free(&lex->spfuns);
 
     old_next= table->next_global;
     if ((table->next_global= lex->query_tables))