* srfi-18: define all of the components of the *primordial-thread* thread object
* srfi-18: pthread-terminate! takes a thread object as argument
Handle this by checking if the argument is the primordial thread,
current thread or another thread.
The first two cases remain almost identical to the previous implementation.
To terminate a thread (which is not the caller) we use a pthread key
which contains the thread data. The destructor is set to Cyc_end_thread
and will terminate the thread when pthread_cancel is called. This ensures
that Cyc_end_thread is called with the correct thread data by the thread
which will be terminated.
* runtime: cast to the required type for pthread_key_create
* runtime: clear the thread_key before exiting the thread
* runtime: handle cancelled threads separately
We probably don't want to call pthread_exit in the destructor.
Similarly, we don't want to perform a longjmp (i.e. GC(...))
in the desctructor.
* runtime: do a minor GC for cancelled threads
The main idea is to avoid a longjmp and return to the destructor
for the cancelled thread. So, adjust GC and gc_minor to allow
for a NULL continuation.
This change defines *ai-v4mapped* to zero when AI_V4MAPPED is undefined
and similarly for *ai-all* (similar to other patches). This allows
(srfi 106) to be available on NetBSD and other platforms without
AI_V4MAPPED and is the recommended behaviour by the author of SRFI-106:
https://srfi-email.schemers.org/srfi-106/msg/2762553/
In the SRFI text, these are constants:
fx-width
fx-greatest
fx-least
But they were implemented as procedures in Cyclone.
This patch changes that, so they now are implemented
as constants.
Hardcode bound such that it is not a bignum (reducing bignum allocations).
Replace symbol hash with a more efficient algorithm, since symbols are uniquely identified by memory location as well as name.