Opened 11 years ago

Closed 11 years ago

#324 closed defect (fixed)

process-whostate sometimes returns a weird value

Reported by: rme Owned by: gb
Priority: minor Milestone: IA-32 port
Component: Runtime (threads, GC) Version:
Keywords: Cc:

Description

Sometimes, something like this happens.

Welcome to Clozure Common Lisp Version 1.2-r10446:10448M-trunk  (DarwinX8632)!
? (process-run-function "do nothing" (lambda ()))
#<PROCESS do nothing(2) [#<Unprintable IMMEDIATE : #xF3>] #x88CB886>

#xf3 is x8632::subtag-no-thread-local-binding.

One expect to see this:

#<PROCESS do nothing(2) [Reset] #x88CB886>

Change History (3)

comment:1 Changed 11 years ago by gb

  • Status changed from new to assigned

%TCR-BINDING-LOCATION is supposed to check for that (i.e., if the contents of the fixnum representing a native-word-aligned address are target::subtag-no-thread-local-binding) and return NIL rather than that fixnum. The tcr's thread is supposed to be suspended while we're looking at it, so it would seem that either the check for the no-thread-local-binding-marker is wrong or (b) there are memory-synchronization issues involved here.

I hope that it's (a), or (c) something else entirely.

comment:2 Changed 11 years ago by gb

Never mind; we suspend the tcr and check to see if it has a thread-local binding for *WHOSTATE*, conclude that it does, then resume the tcr and allow its state to change.

D'oh.

comment:3 Changed 11 years ago by rme

  • Resolution set to fixed
  • Status changed from assigned to closed

Fixed in r10461.

Note: See TracTickets for help on using tickets.