[hunchentoot-devel] Re: Clozure CL HUNCHENTOOT-TEST Error

Wade Humeniuk wade.humeniuk at gmail.com
Mon Jun 16 05:10:09 UTC 2008


As with many things, just writing the problem down has lead to a solution.
I have rebuilt my ccl recently from the latest subversion development.
I thought all this functionality was working before, so I just cleared out
all the compiled files in my asdf-install-dir and rebuilt hunchentoot,
flexi-streams, chunga ...  and the problem went away.

Wade

On Sun, Jun 15, 2008 at 10:52 PM, Wade Humeniuk <wade.humeniuk at gmail.com> wrote:
> I am using Clozure CL 1.2 rc1.2 with Hunchentoot.  The
> hunchentoot-test pages that come with the install
> are not working completely.  I had the to modify the test code in
> test.lisp to get a backtrace of what was
> happening.  stream-direct-utf-8 is throwing an error and no content is
> coming back.
>
> (defvar *htest-debug-stream* nil)
>
> (defun stream-direct-utf-8 ()
>  (handler-bind ((error (lambda (c)
>                          (describe c *htest-debug-stream*)
>                          (format *htest-debug-stream* "~A" (hunchentoot:get-backtrace c)))))
>    (setf (content-type) "text/html; charset=utf-8")
>    (let ((stream (send-headers)))
>      (setf (flex:flexi-stream-external-format stream) *utf-8*)
>      (with-open-file (in (merge-pathnames "UTF-8-demo.html" *this-file*)
>                          :element-type 'flex:octet)
>        (setq in (flex:make-flexi-stream in :external-format *utf-8*))
>        (loop for line = (read-line in nil nil)
>           while line
>           do (write-line line stream))))))
>
> and modifying chunga::write-chunk to..
>
> (defmethod write-chunk ((stream chunked-output-stream) sequence
>                        &key (start 0)
>                             (end (length sequence)))
>  "Writes the contents of SEQUENCE from START to END to the
> underlying stream of STREAM as one chunk."
>  (let ((output-stream (chunked-stream-output-stream stream)))
>    (describe output-stream hunchentoot-test::*htest-debug-stream*)
>    ;; chunk size
>    (format output-stream "~X" (- end start))
>    ;; CRLF
>    (write-string #.(format nil "~C~C" #\Return #\Linefeed) output-stream)
>    ;; data
>    #+:clisp (setf (flexi-stream-element-type output-stream) 'octet)
>    (write-sequence sequence output-stream :start start :end end)
>    #+:clisp (setf (flexi-stream-element-type output-stream) 'character)
>    ;; CRLF
>    (write-string #.(format nil "~C~C" #\Return #\Linefeed) output-stream)))
>
>
>
> Visting the page /hunchentoot/test/utf8-character.txt produces the output below.
> As far as I can tell from looking at the code there should be no instance of
> EXTERNAL-FORMAT since there is no method FLEXI-STREAMS::ENCODING-FACTOR
> for it  (only subclasses of EXTERNAL-FORMAT).  I have pretty well banged my head
> looking at the code in flexi-streams and chunga trying to determine the problem.
> This works fine for SBCL, and I see no conditional code for CCL that
> might explain the
> problem.
>
> Wade
>
> CL-USER> (hunchentoot:start-server :port 4242)
> #<HUNCHENTOOT::SERVER #x3000426BF81D>
> CL-USER> (setf hunchentoot-test::*htest-debug-stream* *standard-output*)
> #<SWANK-BACKEND::SLIME-OUTPUT-STREAM #x300040E2FC1D>
> #<SIMPLE-ERROR #x30004274A50D>
> Class: #<STANDARD-CLASS SIMPLE-ERROR>
> Wrapper: #<CLASS-WRAPPER  #x3000404AC86D>
> Instance slots
> CCL::FORMAT-CONTROL: "No applicable method for args:~% ~s~% to ~s"
> CCL::FORMAT-ARGUMENTS: ((#<EXTERNAL-FORMAT (:ISO-8859-1
>                                            :EOL-STYLE
>                                            :LF) #x30004122DA1D>)
>                        #<STANDARD-GENERIC-FUNCTION
> FLEXI-STREAMS::ENCODING-FACTOR #x300040FACA3F>)
>
>
> BACKTRACE--->>>>>>
>
>  (7FC8F700D0B8) : 0 (GET-BACKTRACE #<SIMPLE-ERROR #x30004274A50D>) 285
>  (7FC8F700D120) : 1 (FUNCALL #'#<(:INTERNAL
> HUNCHENTOOT-TEST::STREAM-DIRECT-UTF-8)> #<SIMPLE-ERROR
> #x30004274A50D>) 173
>  (7FC8F700D140) : 2 (SIGNAL #<SIMPLE-ERROR #x30004274A50D> [...]) 997
>  (7FC8F700D198) : 3 (%ERROR #<SIMPLE-ERROR #x30004274A50D> NIL
> 17562639276619) 117
>  (7FC8F700D1C0) : 4 (CERROR "Try calling it again" "No applicable
> method for args:~% ~s~% to ~s" [...]) 933
>  (7FC8F700D258) : 5 (FUNCALL #'#<#<CCL::STANDARD-KERNEL-METHOD
> NO-APPLICABLE-METHOD (T)>> #<STANDARD-GENERIC-FUNCTION
> FLEXI-STREAMS::ENCODING-FACTOR #x300040FACA3F> [...]) 117
>  (7FC8F700D298) : 7 (FUNCALL #'#<#<STANDARD-METHOD
> TRIVIAL-GRAY-STREAMS:STREAM-WRITE-SEQUENCE
> (FLEXI-STREAMS:FLEXI-OUTPUT-STREAM T T T)>>
> #<FLEXI-STREAMS:FLEXI-IO-STREAM #x30004272511D> "....
>  (7FC8F700D300) : 8 (%%STANDARD-COMBINED-METHOD-DCODE '(# NIL #<#>)
> 17562639276650) 269
>  (7FC8F700D378) : 10 (WRITE-STRING "...
>  (7FC8F700D3D8) : 11 (%PR-INTEGER 0 [...]) 965
>  (7FC8F700D478) : 12 (FORMAT-PRINT-NUMBER
> #<FLEXI-STREAMS:FLEXI-IO-STREAM #x30004272511D> 8187 16 NIL NIL NIL)
> 1829
>  (7FC8F700D4F8) : 13 (FUNCALL #'#<Anonymous Function #x3000409324EF>
> #<FLEXI-STREAMS:FLEXI-IO-STREAM #x30004272511D> NIL NIL [...]) 165
>  (7FC8F700D530) : 14 (SUB-FORMAT #<FLEXI-STREAMS:FLEXI-IO-STREAM
> #x30004272511D> 1 2) 2469
>  (7FC8F700D5E8) : 15 (DO-SUB-FORMAT #<FLEXI-STREAMS:FLEXI-IO-STREAM
> #x30004272511D>) 157
>  (7FC8F700D608) : 16 (FORMAT #<FLEXI-STREAMS:FLEXI-IO-STREAM
> #x30004272511D> "~X" [...]) 1725
>  (7FC8F700D728) : 17 (FUNCALL #'#<#<STANDARD-METHOD
> CHUNGA::WRITE-CHUNK (CHUNGA:CHUNKED-OUTPUT-STREAM T)>>
> #<CHUNGA:CHUNKED-IO-STREAM #x30004273F56D> #(60 33 68 79 67 ...)
> [...]) 237
>  (7FC8F700D770) : 18 (%%CHECK-KEYWORDS #(2 #(:END :START)
> #<METHOD-FUNCTION CHUNGA::WRITE-CHUNK #>) 17562639276793) 245
>  (7FC8F700D7F0) : 20 (FUNCALL #'#<#<STANDARD-METHOD
> CHUNGA::FLUSH-BUFFER (CHUNGA:CHUNKED-OUTPUT-STREAM)>>
> #<CHUNGA:CHUNKED-IO-STREAM #x30004273F56D>) 213
>  (7FC8F700D810) : 21 (FUNCALL #'#<#<STANDARD-METHOD
> TRIVIAL-GRAY-STREAMS:STREAM-WRITE-SEQUENCE
> (CHUNGA:CHUNKED-OUTPUT-STREAM T T T)>> #<CHUNGA:CHUNKED-IO-STREAM
> #x30004273F56D> #(184 177 224 184 162 ...) 0 63 [...]) 709
>  (7FC8F700D868) : 22 (WRITE-SEQUENCE #(184 177 224 184 162 ...)
> #<CHUNGA:CHUNKED-IO-STREAM #x30004273F56D> [...]) 765
>  (7FC8F700D8D8) : 23 (FUNCALL #'#<(:INTERNAL
> FLEXI-STREAMS::FLUSH-BUFFER
> (TRIVIAL-GRAY-STREAMS:STREAM-WRITE-SEQUENCE
> (FLEXI-STREAMS:FLEXI-OUTPUT-STREAM T T T)))>) 85
>  (7FC8F700D900) : 24 (FUNCALL #'#<(:INTERNAL
> FLEXI-STREAMS::WRITE-OCTET (TRIVIAL-GRAY-STREAMS:STREAM-WRITE-SEQUENCE
> (FLEXI-STREAMS:FLEXI-OUTPUT-STREAM T T T)))> 154) 69
>  (7FC8F700D938) : 25 (FUNCALL #'#<#<STANDARD-METHOD
> FLEXI-STREAMS::CHAR-TO-OCTETS (FLEXI-STREAMS::FLEXI-UTF-8-FORMAT T
> T)>> #<FLEXI-UTF-8-FORMAT (:UTF-8 :EOL-STYLE :LF) #x300042642DBD>
> #\U+0E1A #<COMPILED-LEXICAL-CLOSURE (:INTERNAL
> FLEXI-STREAMS::WRITE-OCTET #) #x30004274A8CF>) 1629
>  (7FC8F700D970) : 26 (FUNCALL #'#<#<STANDARD-METHOD
> TRIVIAL-GRAY-STREAMS:STREAM-WRITE-SEQUENCE
> (FLEXI-STREAMS:FLEXI-OUTPUT-STREAM T T T)>>
> #<FLEXI-STREAMS:FLEXI-IO-STREAM #x30004273CBCD> "
>  (7FC8F700D9F8) : 27 (%%STANDARD-COMBINED-METHOD-DCODE '(# NIL #<#>)
> 17562639276873) 269
>  (7FC8F700DA70) : 29 (WRITE-STRING "...
>  (7FC8F700DAD0) : 30 (WRITE-LINE "
>  (7FC8F700DB20) : 31 (STREAM-DIRECT-UTF-8) 805
>  (7FC8F700DBB0) : 32 (PROCESS-REQUEST '(# # # # # ...)
> #<FLEXI-STREAMS:FLEXI-IO-STREAM #x30004273CBCD> :GET
> "/hunchentoot/test/utf8-character.txt" :HTTP/1.1) 3045
>  (7FC8F700DD18) : 33 (PROCESS-CONNECTION #<HUNCHENTOOT::SERVER
> #x3000426BF81D> #<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/6)
> #x30004271F65D>) 5429
>  (7FC8F700DEB8) : 34 (RUN-PROCESS-INITIAL-FORM #<PROCESS
> hunchentoot-worker-1(13) [Active] #x30004271E9BD> '(#)) 717
>  (7FC8F700DF48) : 35 (FUNCALL #'#<(:INTERNAL
> CCL::%PROCESS-PRESET-INTERNAL)> #<PROCESS hunchentoot-worker-1(13)
> [Active] #x30004271E9BD> '(#)) 397
>  (7FC8F700DF98) : 36 (FUNCALL #'#<(:INTERNAL
> CCL::THREAD-MAKE-STARTUP-FUNCTION)>) 293
>
> CHUNGA INFO--->>>>>>>>>
>
> Class: #<STANDARD-CLASS FLEXI-STREAMS:FLEXI-IO-STREAM>
> Wrapper: #<CLASS-WRAPPER  #x300040FCCC3D>
> Instance slots
> CCL::SHARED-RESOURCE: NIL
> STREAM: #<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/6) #x3000426A322D>
> FLEXI-STREAMS::EXTERNAL-FORMAT: #<EXTERNAL-FORMAT (:ISO-8859-1
>                                                   :EOL-STYLE
>                                                   :LF) #x30004122DA1D>
> FLEXI-STREAMS::ELEMENT-TYPE: FLEXI-STREAMS::CHAR*
> FLEXI-STREAMS::COLUMN: 0
> FLEXI-STREAMS::LAST-CHAR-CODE: NIL
> FLEXI-STREAMS::LAST-OCTET: NIL
> FLEXI-STREAMS::OCTET-STACK: NIL
> POSITION: 0
> FLEXI-STREAMS::BOUND: NIL
> #<FLEXI-STREAMS:FLEXI-IO-STREAM #x3000426A36BD>
> Class: #<STANDARD-CLASS FLEXI-STREAMS:FLEXI-IO-STREAM>
> Wrapper: #<CLASS-WRAPPER  #x300040FCCC3D>
> Instance slots
> CCL::SHARED-RESOURCE: NIL
> STREAM: #<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/6) #x3000426A322D>
> FLEXI-STREAMS::EXTERNAL-FORMAT: #<EXTERNAL-FORMAT (:ISO-8859-1
>                                                   :EOL-STYLE
>                                                   :LF) #x30004122DA1D>
> FLEXI-STREAMS::ELEMENT-TYPE: FLEXI-STREAMS::CHAR*
> FLEXI-STREAMS::COLUMN: 0
> FLEXI-STREAMS::LAST-CHAR-CODE: NIL
> FLEXI-STREAMS::LAST-OCTET: NIL
> FLEXI-STREAMS::OCTET-STACK: NIL
> POSITION: 0
> FLEXI-STREAMS::BOUND: NIL
>



More information about the Tbnl-devel mailing list