From: Ilya Zakharevich Date: Fri, 13 Dec 2002 14:00:48 +0000 (-0800) Subject: Morphing to PM on OS/2 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=8c4b3a79c68253730d09878656b5526d4d65ef85;p=p5sagit%2Fp5-mst-13.2.git Morphing to PM on OS/2 Message-ID: <20021213220048.GA2606@math.berkeley.edu> p4raw-id: //depot/perl@18314 --- diff --git a/os2/OS2/Process/t/os2_process.t b/os2/OS2/Process/t/os2_process.t index f171047..016c799 100644 --- a/os2/OS2/Process/t/os2_process.t +++ b/os2/OS2/Process/t/os2_process.t @@ -24,7 +24,7 @@ BEGIN { # Remap I/O to the parent's window } use strict; -use Test::More tests => 227; +use Test::More tests => 230; use OS2::Process; sub SWP_flags ($) { @@ -237,21 +237,25 @@ ok hWindowPos_set({behind => 4}, $k_hwnd), # HWND_BOTTOM # This does not work, the result is the handle of "Window List" # is((hWindowPos $k_hwnd)->{behind}, 4, 'kis is at back'); -my (@list, $next); +my (@list, $next, @list1); { my $force_PM = OS2::localMorphPM->new(0); ok $force_PM, 'morphed to PM locally again'; $enum_handle = BeginEnumWindows 1; # HWND_DESKTOP ok $enum_handle, 'start enumeration'; push @list, $next while $next = GetNextWindow $enum_handle; + @list1 = ChildWindows; + ok 1, 'embedded ChildWindows()'; ok EndEnumWindows($enum_handle), 'end enumeration'; + is_deeply \@list, \@list1, 'Manual list same as by ChildWindows()'; # Apparently, the 'Desktop' window is still behind us; # Note that this window is *not* what is returned by DesktopWindow pop @list if WindowText($list[-1]) eq 'Desktop'; } is ($list[-1], $k_hwnd, 'kid is the last in z-order enumeration'); # print "# kid=$k_hwnd in @list\n"; -@list = ChildWindows; # HWND_DESKTOP +@list = ChildWindows; +is_deeply \@list, \@list1, 'Other ChildWindows(), same result'; ok scalar @list, 'ChildWindows works'; is $list[-2], $k_hwnd, 'kid is the last but one in ChildWindows'; diff --git a/os2/os2.c b/os2/os2.c index b484e9d..fc05f4e 100644 --- a/os2/os2.c +++ b/os2/os2.c @@ -1429,11 +1429,10 @@ Perl_hab_GET() /* Needed if perl.h cannot be included */ HMQ Perl_Register_MQ(int serve) { + if (Perl_hmq_refcnt <= 0) { PPIB pib; PTIB tib; - if (Perl_hmq_refcnt > 0) - return Perl_hmq; Perl_hmq_refcnt = 0; /* Be extra safe */ DosGetInfoBlocks(&tib, &pib); Perl_os2_initial_mode = pib->pib_ultype; @@ -1451,6 +1450,7 @@ Perl_Register_MQ(int serve) _exit(188); /* Panic can try to create a window. */ Perl_croak_nocontext("Cannot create a message queue, or morph to a PM application"); } + } if (serve) { if ( Perl_hmq_servers <= 0 /* Safe to inform us on shutdown, */ && Perl_hmq_refcnt > 0 ) /* this was switched off before... */