Ignore:
Timestamp:
Feb 9, 2012, 9:20:57 AM (8 years ago)
Author:
gb
Message:

Defer all aspects of gcable-pointer termination until after other
threads have been resumed. This is necessary because some things
that we were doing earlier (sem_destroy, for instance) may try to
do memory operations that may require ownership of a lock owned
by some other thread.

There are some (hopefully minor) consequences of this change: the
GC has to retain an otherwise unreachable lisp XMACPTR object until
the next GC, and some foreign resources might by tied up slightly
longer than they had been in the old scheme.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/lisp-kernel/pmcl-kernel.c

    r15191 r15202  
    23592359#if defined(LINUX) || defined(FREEBSD) || defined(SOLARIS)
    23602360#if WORD_SIZE == 64
    2361 typedef Elf64_Dyn Elf_Dyn;
    2362 typedef Elf64_Ehdr Elf_Ehdr;
    2363 typedef Elf64_Shdr Elf_Shdr;
    2364 #else
    2365 typedef Elf32_Dyn Elf_Dyn;
    2366 typedef Elf32_Ehdr Elf_Ehdr;
    2367 typedef Elf32_Shdr Elf_Shdr;
    2368 #endif
    2369 
    2370 Elf_Dyn *
     2361typedef Elf64_Dyn Elf_Dyn_thing;
     2362typedef Elf64_Ehdr Elf_Ehdr_thing;
     2363typedef Elf64_Shdr Elf_Shdr_thing;
     2364#else
     2365typedef Elf32_Dyn Elf_Dyn_thing;
     2366typedef Elf32_Ehdr Elf_Ehdr_thing;
     2367typedef Elf32_Shdr Elf_Shdr_thing;
     2368#endif
     2369
     2370Elf_Dyn_thing *
    23712371get_executable_dynamic_entries()
    23722372{
    23732373#ifndef CCLSHARED
    2374   extern Elf_Dyn _DYNAMIC[];
     2374  extern Elf_Dyn_thing _DYNAMIC[];
    23752375  return _DYNAMIC;
    23762376#else
     
    24262426{
    24272427  int tag;
    2428   Elf_Dyn *dp;
     2428  Elf_Dyn_thing *dp;
    24292429
    24302430  if (cached_r_debug == NULL) {
Note: See TracChangeset for help on using the changeset viewer.