On 5/25/07, Edi Weitz edi@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.