let remove_all_message_stack (name_in_session : string) : unit =
        let remove_message name_in_session message = 
                let res = ref false in
                let message_list = Hashtbl.find_all message_stack name_in_session in
                let rec aux l buff =
                        match l with [] -> (List.iter (fun t -> (Hashtbl.add message_stack name_in_session t)) buff)
                                |(x::ls) -> (        Hashtbl.remove message_stack name_in_session;
                                                if (x=message)
                                                then(res:= true ; aux ls buff)
                                                else(aux ls (x::buff)));
                in
                aux message_list [];
                if(!res) then                
                (        if(List.mem (name_in_session,message) (!add_on_stack))
                        then add_on_stack:=remove (name_in_session,message) (!add_on_stack)
                        else remove_of_stack:= (name_in_session,message)::(!remove_of_stack)
                );
        in
        let is_agent (name,_,type_of_mess) name_in_session type_of_message = (name=name_in_session && type_of_mess=type_of_message) in
        (Hashtbl.iter
        (fun n message -> if(is_agent n name_in_session "_message_stack"then  (remove_message n message))
        message_stack)