[hunchentoot-devel] Hunchentoot and OpenMCL

Lennart Staflin lstaflin at gmail.com
Fri May 25 16:07:33 UTC 2007


On 5/25/07, Edi Weitz <edi at agharta.de> wrote:
> Hi,
>

> You're asking at the right moment... :)
>
> It seems we currently have problems with OpenMCL and I can't do much
> about it as I don't have a Mac.  If you check the mailing list
> archives of tbnl-devel and flexi-streams-devel of this month, you'll
> find all the details.
>

Flexi-streams passes all its tests on the latest OpenMCL, I don't
think that is the problem.


> I was close to removing OpenMCL support from Hunchentoot, but if you
> can help fixing the issues, that's fine of course.
>
> > Any experience converting a project from aserve to Hunchentoot?
>
> Not me.
>
> > Probably the timer functions have been removed in some of the later
> > versions of OpenMCL. Unless someone has a fix already I will dig
> > into this.

Or possibly these functions where never in OpenMCL. I think these
functions (ccl::make-timer-request etc.) are defined in acl-compat,
and some how never made it over to port-mcl. They are in a file called
mcl-timers.lisp in acl-compat. Perhaps, if licensing allows, you could
include that file.

Reading the mailing list archive, I noticed another problem that I also had.

  ... i get an error that  says: Unknown http return code: 500

I have tracked this down. It is not related to flexi-streams, but to a
defconstant in specials.lisp:

  (defconstant +http-reason-phrase-map+ (make-hash-table)

When the file is complied and loaded that hash table is empty. I
haven't checked with the OpenMCL developers, but I think this might be
invoking undefined behavior.

CLHS: "An implementation may choose to evaluate the value-form at
compile time, load time, or both."

If the compiler evaluates the (make-hash-table) both at compile time
and load time, and optimizes away the constant lookup (directly uses
that hash table as a literal) in the setter forms. The result would be
as observed in openmcl.

I think either of these would work:

 (defparameter +http-reason-phrase-map+ (make-hash-table)
 (defconstant +http-reason-phrase-map+ '#.(make-hash-table)

With these changes I can now get the test examples to work.

-- 
//Lennart Staflin



More information about the Tbnl-devel mailing list