Skip to content

Commit ee5e593

Browse files
author
jdhedden
committed
threads-shared v1.24
1 parent 2c95d8c commit ee5e593

File tree

9 files changed

+1081
-83
lines changed

9 files changed

+1081
-83
lines changed

Changes

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
Revision history for Perl extension threads::shared.
22

3+
1.24 Mon Jul 7 17:34:37 2008
4+
- Support utf8 hash keys (bug #37149)
5+
- Use standardized watchdog/timeout code in tests
6+
37
1.23 Tue Jun 17 20:26:13 2008
48
- Rewrite of timer process in tests
59

MANIFEST

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,9 @@ t/shared_attr.t
2323
t/stress.t
2424
t/sv_refs.t
2525
t/sv_simple.t
26+
t/utf8.t
2627
t/wait.t
2728
t/waithires.t
29+
t/test.pl
2830
examples/class.pl
2931
META.yml Module meta-data (added by MakeMaker)

README

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
threads::shared version 1.23
1+
threads::shared version 1.24
22
============================
33

44
This module needs Perl 5.8.0 or later compiled with USEITHREADS.

shared.pm

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use warnings;
77

88
use Scalar::Util qw(reftype refaddr blessed);
99

10-
our $VERSION = '1.23';
10+
our $VERSION = '1.24';
1111
my $XS_VERSION = $VERSION;
1212
$VERSION = eval $VERSION;
1313

@@ -186,7 +186,7 @@ threads::shared - Perl extension for sharing data structures between threads
186186
187187
=head1 VERSION
188188
189-
This document describes threads::shared version 1.23
189+
This document describes threads::shared version 1.24
190190
191191
=head1 SYNOPSIS
192192
@@ -540,7 +540,7 @@ L<threads::shared> Discussion Forum on CPAN:
540540
L<http://www.cpanforum.com/dist/threads-shared>
541541
542542
Annotated POD for L<threads::shared>:
543-
L<http://annocpan.org/~JDHEDDEN/threads-shared-1.23/shared.pm>
543+
L<http://annocpan.org/~JDHEDDEN/threads-shared-1.24/shared.pm>
544544
545545
Source repository:
546546
L<http://code.google.com/p/threads-shared/>

shared.xs

Lines changed: 37 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@
123123
# define NEED_sv_2pv_flags
124124
# define NEED_vnewSVpvf
125125
# define NEED_warner
126+
# define NEED_newSVpvn_flags
126127
# include "ppport.h"
127128
# include "shared.h"
128129
#endif
@@ -872,10 +873,15 @@ sharedsv_elem_mg_FETCH(pTHX_ SV *sv, MAGIC *mg)
872873
svp = av_fetch((AV*) saggregate, mg->mg_len, 0);
873874
} else {
874875
char *key = mg->mg_ptr;
875-
STRLEN len = mg->mg_len;
876+
I32 len = mg->mg_len;
876877
assert ( mg->mg_ptr != 0 );
877878
if (mg->mg_len == HEf_SVKEY) {
878-
key = SvPV((SV *) mg->mg_ptr, len);
879+
STRLEN slen;
880+
key = SvPV((SV *)mg->mg_ptr, slen);
881+
len = slen;
882+
if (SvUTF8((SV *)mg->mg_ptr)) {
883+
len = -len;
884+
}
879885
}
880886
SHARED_CONTEXT;
881887
svp = hv_fetch((HV*) saggregate, key, len, 0);
@@ -923,10 +929,16 @@ sharedsv_elem_mg_STORE(pTHX_ SV *sv, MAGIC *mg)
923929
svp = av_fetch((AV*) saggregate, mg->mg_len, 1);
924930
} else {
925931
char *key = mg->mg_ptr;
926-
STRLEN len = mg->mg_len;
932+
I32 len = mg->mg_len;
927933
assert ( mg->mg_ptr != 0 );
928-
if (mg->mg_len == HEf_SVKEY)
929-
key = SvPV((SV *) mg->mg_ptr, len);
934+
if (mg->mg_len == HEf_SVKEY) {
935+
STRLEN slen;
936+
key = SvPV((SV *)mg->mg_ptr, slen);
937+
len = slen;
938+
if (SvUTF8((SV *)mg->mg_ptr)) {
939+
len = -len;
940+
}
941+
}
930942
SHARED_CONTEXT;
931943
svp = hv_fetch((HV*) saggregate, key, len, 1);
932944
}
@@ -954,10 +966,16 @@ sharedsv_elem_mg_DELETE(pTHX_ SV *sv, MAGIC *mg)
954966
av_delete((AV*) saggregate, mg->mg_len, G_DISCARD);
955967
} else {
956968
char *key = mg->mg_ptr;
957-
STRLEN len = mg->mg_len;
969+
I32 len = mg->mg_len;
958970
assert ( mg->mg_ptr != 0 );
959-
if (mg->mg_len == HEf_SVKEY)
960-
key = SvPV((SV *) mg->mg_ptr, len);
971+
if (mg->mg_len == HEf_SVKEY) {
972+
STRLEN slen;
973+
key = SvPV((SV *)mg->mg_ptr, slen);
974+
len = slen;
975+
if (SvUTF8((SV *)mg->mg_ptr)) {
976+
len = -len;
977+
}
978+
}
961979
SHARED_CONTEXT;
962980
hv_delete((HV*) saggregate, key, len, G_DISCARD);
963981
}
@@ -1274,8 +1292,13 @@ EXISTS(SV *obj, SV *index)
12741292
SHARED_EDIT;
12751293
exists = av_exists((AV*) sobj, SvIV(index));
12761294
} else {
1277-
STRLEN len;
1278-
char *key = SvPV(index,len);
1295+
I32 len;
1296+
STRLEN slen;
1297+
char *key = SvPVutf8(index, slen);
1298+
len = slen;
1299+
if (SvUTF8(index)) {
1300+
len = -len;
1301+
}
12791302
SHARED_EDIT;
12801303
exists = hv_exists((HV*) sobj, key, len);
12811304
}
@@ -1297,9 +1320,10 @@ FIRSTKEY(SV *obj)
12971320
hv_iterinit((HV*) sobj);
12981321
entry = hv_iternext((HV*) sobj);
12991322
if (entry) {
1323+
I32 utf8 = HeKUTF8(entry);
13001324
key = hv_iterkey(entry,&len);
13011325
CALLER_CONTEXT;
1302-
ST(0) = sv_2mortal(newSVpv(key, len));
1326+
ST(0) = sv_2mortal(newSVpvn_utf8(key, len, utf8));
13031327
} else {
13041328
CALLER_CONTEXT;
13051329
ST(0) = &PL_sv_undef;
@@ -1323,9 +1347,10 @@ NEXTKEY(SV *obj, SV *oldkey)
13231347
SHARED_CONTEXT;
13241348
entry = hv_iternext((HV*) sobj);
13251349
if (entry) {
1350+
I32 utf8 = HeKUTF8(entry);
13261351
key = hv_iterkey(entry,&len);
13271352
CALLER_CONTEXT;
1328-
ST(0) = sv_2mortal(newSVpv(key, len));
1353+
ST(0) = sv_2mortal(newSVpvn_utf8(key, len, utf8));
13291354
} else {
13301355
CALLER_CONTEXT;
13311356
ST(0) = &PL_sv_undef;

0 commit comments

Comments
 (0)