Robby,

Thanks for the info! I just installed today's snapshot and the
connection now seems to disconnect itself when I restart the program.

Will executor for the connection still does not work, but since
the initial problem went away, I am not worried.

Best regards,

Dmitry

On 12/26/2014 09:10 PM, Robby Findler wrote:
Which version of Racket are you using? I think Ryan pushed some
custodian related improvements to the db library recently.

Robby

On Friday, December 26, 2014, Dmitry Pavlov <[email protected]
<mailto:[email protected]>> wrote:

    Hello,

    Let us say I put this program into DrRacket's Definitions window:

    ------------------------------__------------------------------__-----
    #lang racket
    (require db)

    (define path "aaa.db")

    (when (file-exists? path)
       (delete-directory/files path))

    (define conn (sqlite3-connect #:database path #:mode 'create))
    ------------------------------__------------------------------__-----

    and then press the "Run" button. After that, I play with conn
    in the Interactions window. When I have played enough,
    I press the "Run" button again. Here is what I get:

    delete-file: cannot delete file
       path: [...]\aaa.db
       system error: Permission denied; errno=13

    The reason is that I forgot to (disconnect conn) in the end.
    (I get that only on Windows; Linux is OK with removing opened files).

    How do I disconnect automatically? Putting the (disconnect conn)
    into the Definitions window is not a solution, as I want to use
    conn in the Interactions (also I want to be safe against the
    "Stop" button pressed in the middle of the program before the
    disconnect happens)

    I tried to use a will executor:

    ------------------------------__------------------------------__-----
    (define an-executor (make-will-executor))
    (void
        (thread
         (lambda ()
           (let loop ()
             (will-execute an-executor)
             (loop)))))

    (define (executor-proc v) (printf "I am now garbage\n") (disconnect v))
    (will-register an-executor conn executor-proc)
    ------------------------------__------------------------------__-----

    Surprisingly, it did not work for the database connection (while it
    does work for other kinds of objects), and I have no idea why. It
    does not work even with I call the GC explicitly:

    ------------------------------__------------------------------__-----
    (set! conn #f)
    (collect-garbage)
    ------------------------------__------------------------------__-----

    Is it possible to make the will executor work?
    Generally speaking, what is the recommended way to do this kind
    of thing?


    Best regards,

    Dmitry

    ____________________
      Racket Users list:
    http://lists.racket-lang.org/__users
    <http://lists.racket-lang.org/users>



____________________
   Racket Users list:
   http://lists.racket-lang.org/users

____________________
 Racket Users list:
 http://lists.racket-lang.org/users

Reply via email to