Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Re: Perl forking and shared memory strangeness under Windows

by xiper (Friar)
on Feb 23, 2004 at 21:26 UTC ( #331217=note: print w/replies, xml ) Need Help??


in reply to Perl forking and shared memory strangeness under Windows

I think you'll find your original program was crashing regardless, you just weren't seeing the error message when the comment was there (i had a similar problem with data after an __END__ token that also hid the error). Can't explain why tho'...

The require trick mentioned above still doesn't solve the following scenario:

use strict; require Win32::MMF::Shareable; $|++; tie( my $share, 'Win32::MMF::Shareable', 'share' ) || die; $share = 'foo'; # do some unrelated forking with $share in scope unless( fork ) { exit 0 } # make sure child exits before continuing sleep 1; # set/get crashes print "----before\n"; $share = 'bar'; my $temp = $share; print "----after\n"; __END__ ----before

- ><iper

use japh; print;

Replies are listed 'Best First'.
Re: Re: Perl forking and shared memory strangeness under Windows
by Roger (Parson) on Feb 23, 2004 at 22:45 UTC
    Hi xiper, as BrowserUk has suggested earlier, there is a problem with forking under Windows. The cure is to create two separate instances of Shareable, one in child and one in parent. So the require should be after the fork. I modified the code to below and it ran without problems.
    use strict; $|++; # do some unrelated forking with $share in scope unless( fork ) { exit 0 } require Win32::MMF::Shareable; tie( my $share, 'Win32::MMF::Shareable', 'share' ) || die; $share = 'foo'; # make sure child exits before continuing sleep 1; # set/get crashes print "----before\n"; $share = 'bar'; my $temp = $share; print "----after\n";

      Yes, but a solution that changes the logic of a program isn't practical. You're effectivly saying that "you can't fork with a tied variable in scope" - even if the child has nothing to do with the tied variable. My point was it isn't always possible (nor should it be) to redesign a program around this 'solution'.

      - ><iper

      use japh; print;

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://331217]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (4)
As of 2023-02-06 05:23 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    I prefer not to run the latest version of Perl because:







    Results (33 votes). Check out past polls.

    Notices?