Ah-Ha! It must be something to do with the threads as you say.
I seem to get the same result reguardless of which package I start TBNL from. FWIW, I'm using CMU Common Lisp 19b (19B) on FreeBSD 4.11-STABLE.
I still get the same result reguardless of which package I start TBNL from. My file now looks like this:
(defpackage :mypackage) (in-package :mypackage)
(tbnl:start-tbnl)
(defun some-func () (cl-who:with-html-output-to-string (*standard-output* nil :prologue nil :indent nil) (:HTML (:HEAD (:TITLE "foo")) (:BODY (cl-who:str (CL-WHO:ESCAPE-STRING (format () "package: ~A" *package*)))))))
(setq tbnl:*dispatch-table* (list (tbnl:create-prefix-dispatcher "/foo" #'some-func)))
Why should it display #<MYPACKAGE package>? *PACKAGE* is a runtime concept, it's not a literal constant that's hard-coded into the function when you compile it:
Right. The point of my example was to show that, at runtime, *PACKAGE* seems to always be bound to :COMMON-LISP-USER for any function I run inside of TBNL. My cureosity is why does that happen; while I haven't yet looked at the CMUCL thread documentation, my guess is that it is related to threads.
The package you see in your example depends on how (from where) you started TBNL and how (from where) the thread that handles the request is invoked.
Under CMUCL, I see that the former (where TBNL is started) has no effect. My guess is that, for whatever reason, the thread is launched in the :COMMON-LISP-USER package.
So, the important part is missing in your example above: When and how did you invoke TBNL:START-TBNL? I bet you did that from CL-USER and you will see a different result if you start it from MYPACKAGE.
It doesn't seem to matter. :) In my original email, I stated that my Lisp environment is set up such that I *NEVER* see the CL-USER package which is why I found it so strange that *PACKAGE* would ever be set to :COMMON-LISP-USER!
If you're doing something with packages at runtime you should always re-bind *PACKAGE* - or in the case of INTERN you should use its second argument.
Thats probably the advice I was looking for :) Sorry for being so dense :)
Jim