In v6.4.2, ThreadContext stores request-specific headers and transient values in the shared field threadLocal, whose concrete type is ThreadContext.ContextThreadLocal.
There appears to be a race between ThreadContext.close() and concurrent context-access operations. ThreadContext.close() closes threadLocal, while methods such as getHeader(String key), getHeaders(), getTransient(String key), and newStoredContext(boolean preserveResponseHeaders) may still call threadLocal.get() or threadLocal.set() from another thread.