fix deadlock

This commit is contained in:
Vítor Santos Costa 2015-10-08 10:19:17 +01:00
parent 555d146dc5
commit 699dcfe6eb

View File

@ -65,11 +65,9 @@ Term Yap_StringToNumberTerm(char *s, encoding_t *encp) {
GLOBAL_Stream[sno].encoding = *encp; GLOBAL_Stream[sno].encoding = *encp;
else else
GLOBAL_Stream[sno].encoding = LOCAL_encoding; GLOBAL_Stream[sno].encoding = LOCAL_encoding;
UNLOCK(GLOBAL_Stream[sno].streamlock);
while (*s && isblank(*s++)) while (*s && isblank(*s++))
; ;
t = Yap_scan_num(GLOBAL_Stream + sno); t = Yap_scan_num(GLOBAL_Stream + sno);
GLOBAL_Stream[sno].status = Free_Stream_f;
if (t == TermNil) { if (t == TermNil) {
CACHE_REGS CACHE_REGS
int sign = 1; int sign = 1;
@ -86,7 +84,7 @@ Term Yap_StringToNumberTerm(char *s, encoding_t *encp) {
} else { } else {
return MkFloatTerm(-INFINITY); return MkFloatTerm(-INFINITY);
} }
} }
if (strcmp(s, "nan") == 0) { if (strcmp(s, "nan") == 0) {
if (sign > 0) { if (sign > 0) {
return MkFloatTerm(NAN); return MkFloatTerm(NAN);
@ -95,6 +93,8 @@ Term Yap_StringToNumberTerm(char *s, encoding_t *encp) {
} }
} }
} }
Yap_CloseStream(sno);
UNLOCK(GLOBAL_Stream[sno].streamlock);
return t; return t;
} }