# Copyright 2021-2023 Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

# Test that GDB handles well a thread exiting with sched-lock on.  A buggy GDB
# would hang, a fixed GDB shows the "No unwaited-for children left" message and
# shows the prompt.
#
# The explanation for the original bug involved some threads with a pending
# wait status, so we launch multiple threads, which very likely gives us that.

standard_testfile

if { [build_executable "failed to prepare" ${testfile} ${srcfile} \
	  {debug pthreads additional_flags=-std=c99}] } {
    return
}

proc do_test { } {
    clean_restart $::binfile

    # One of the launched threads will report a stop on thread_func.  Some
    # others will also stop on thread_func and have a pending status.
    if { ![runto "thread_func"] } {
	return
    }

    gdb_test_no_output "set scheduler-locking on"
    gdb_test "continue" "No unwaited-for children left."
}

do_test
