summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorArtur Bergman <sky@nanisky.com>2003-04-21 17:05:31 +0000
committerArtur Bergman <sky@nanisky.com>2003-04-21 17:05:31 +0000
commit56fcff86cbedc2a57183ad9c931fd8c116d23e4f (patch)
tree943066cf068a1a6bc030cc00c5e52eedf66e379b /ext
parent6a809565f92f58eb2e23772b87ab5c4f45ee1dd0 (diff)
downloadperl-56fcff86cbedc2a57183ad9c931fd8c116d23e4f.tar.gz
Croak on non ref to shared methods instead of segfault.
This can really only happen for &share("string"). p4raw-id: //depot/perl@19299
Diffstat (limited to 'ext')
-rw-r--r--ext/threads/shared/shared.xs10
1 files changed, 10 insertions, 0 deletions
diff --git a/ext/threads/shared/shared.xs b/ext/threads/shared/shared.xs
index 3e7916fa3d..9e0f73b5e9 100644
--- a/ext/threads/shared/shared.xs
+++ b/ext/threads/shared/shared.xs
@@ -965,6 +965,8 @@ SV*
share(SV *ref)
PROTOTYPE: \[$@%]
CODE:
+ if(!SvROK(ref))
+ Perl_croak(aTHX_ "Argument to share needs to be passed as ref");
ref = SvRV(ref);
if(SvROK(ref))
ref = SvRV(ref);
@@ -978,6 +980,8 @@ lock_enabled(SV *ref)
PROTOTYPE: \[$@%]
CODE:
shared_sv* shared;
+ if(!SvROK(ref))
+ Perl_croak(aTHX_ "Argument to lock needs to be passed as ref");
ref = SvRV(ref);
if(SvROK(ref))
ref = SvRV(ref);
@@ -992,6 +996,8 @@ cond_wait_enabled(SV *ref)
CODE:
shared_sv* shared;
int locks;
+ if(!SvROK(ref))
+ Perl_croak(aTHX_ "Argument to cond_wait needs to be passed as ref");
ref = SvRV(ref);
if(SvROK(ref))
ref = SvRV(ref);
@@ -1022,6 +1028,8 @@ cond_signal_enabled(SV *ref)
PROTOTYPE: \[$@%]
CODE:
shared_sv* shared;
+ if(!SvROK(ref))
+ Perl_croak(aTHX_ "Argument to cond_signal needs to be passed as ref");
ref = SvRV(ref);
if(SvROK(ref))
ref = SvRV(ref);
@@ -1038,6 +1046,8 @@ cond_broadcast_enabled(SV *ref)
PROTOTYPE: \[$@%]
CODE:
shared_sv* shared;
+ if(!SvROK(ref))
+ Perl_croak(aTHX_ "Argument to cond_broadcast needs to be passed as ref");
ref = SvRV(ref);
if(SvROK(ref))
ref = SvRV(ref);