Custom Query (1030 matches)

Filters
 
Or
 
  
 
Columns

Show under each result:


Results (232 - 234 of 1030)

Ticket Resolution Summary Owner Reporter
#1014 fixed remove-if-not consing: seems to fully copy the original sequence before removing elements Anton Vodonosov
Description
(DEFPARAMETER *FILTERED-LIST* (REMOVE-IF-NOT (CONSTANTLY NIL) *LONG-LIST*))
took 75,108,000 microseconds (75.108000 seconds) to run.
     73,183,190 microseconds (73.183190 seconds, 97.44%) of which was spent in GC.
During that period, and with 8 available CPU cores,
     74,662,078 microseconds (74.662080 seconds) were spent in user mode
        171,601 microseconds ( 0.171601 seconds) were spent in system mode
 320,000,128 bytes of memory allocated.

(length *long-list*)
=> 20000000

(/ 320000128.0 (length *long-list*))
=> 16.000006
;; I.e. 16 bytes (64 bit cons) per element of original lisp

(asdf:implementation-identifier)
=> "ccl-1.8-f95-win-x64"

Probably the remove-if-not implementation could be enhanced.

#1015 fixed user code is forced to have a race condition between ccl:external-process-status and ccl:signal-external-process Anton Vodonosov
Description

The use case.

If the external process I started exceeds a timeout, I am trying to kill the process by sending it signal 9 using ccl:signal-external-process.

To know that the process exceeds the timeout, I pool it with ccl:external-process-status and check if the result is :running.

I.e. my code may approximately be represented as:

  (when (and (eq :running
                 (ccl:external-process-status lisp-process))
             (< end-time (get-universal-time)))
    (ccl:signal-external-process lisp-process 9))

But sometimes, the process finishes right after I got the :running from (ccl:external-process-status lisp-process), but before (ccl:signal-external-process lisp-process 9) tries to send it a signal.

In this case, CCL signals SIMPLE-ERROR with text "No such process".

I can not distinguish this error of process being finished, from other errors, because the CCL API doesn't specify particular condition type for this situation, and I can't rely on the text "No such process" as well (I believe the text is linux message for the corresponding errno value).

So, I try to setup a condition handler, and in the handler check the external-process-status again. If it is not :running, I deduce that the condition signaled is caused by the fact that the process has terminated (which is what my code wanted - to kill it, so I can just continue normal processing).

In most cases it works.

But sometimes, after the "No such process" error was signaled and the handler calls external-process-status, external-process-status returns :running. I assume this is because the external process is monitored by an internal CCL background thread, and the background thread hasn't yet synchronized the external-process CCL structure inspected by external-process-status.

As you see, it's not easy to reliable kill and external process by timeout. The API design forces user to deal with these race conditions.

I am not ready to propose a solution.

Maybe synchronization of the external-process object with the real situation before signaling the error would be a good idea?

#1017 invalid Trifle in documentation: class definition slot args - readers writers p2
Description

My mistaken defclass threw up:

Error: :ACESSOR is an invalid initarg to INITIALIZE-INSTANCE for #<STANDARD-CLASS CCL:STANDARD-DIRECT-SLOT-DEFINITION>.

Valid initargs: (:NAME :TYPE :INITFUNCTION :INITFORM :INITARGS :ALLOCATION :DOCUMENTATION :CLASS :READERS :WRITERS).

While executing: CCL::CHECK-INITARGS,

Assume this should be :reader and :writer (not plural).

Batch Modify
Note: See TracBatchModify for help on using batch modify.
Note: See TracQuery for help on using queries.