Looking for best practice in switching libraries

Paul Dupuis paul at researchware.com
Sat Oct 25 11:45:05 EDT 2014


I am looking for a 'best' practice in switching between versions of a
library stack.

I have several versions of a 3rd party library stack, with file names
called libraryv1.livecode, libraryv2.livecode, and libraryv3.livecode
The stack name in the 3 files is always the same - say 'library' and as
the 3rd party library references itself by name, I can't change the
stack name - just the file name.

So that means I need to open the library file for the version I want.
'start using' the library, perform a set of operations, 'stop using' the
library and close the stack - REMOVING IT FROM MEMORY - so that when I
open a different version, the stack name does not collide.

The 'close stack' entry in the dictionary correctly notes that you must
set destroyStack to true to have the stack removed form memory and that
if the close stack is called from a handle in the stack being close, the
stack will not be removed form memory until after the handler has
finished executing. All well an good. The libraries are all external
stacks.I have code in my main stack:

command closeCurrentLibrary
  global gLibraryStack
  if gLibraryStackis not empty then -- stop using previous library
    stop using "library"
    wait 0 with messages -- allow system to send and process
releaseStack message
    set the destroyStack of stack "library" to true
    close stack "library" -- allow system to close and remove form memory
    wait 0 with messages
  end if
end closeCurrentLibrary

command startLibraryv1 -- similar commands for libraryv2 and libraryv3
  global gLibraryStack
  put AppPath()&"libraryv1.livecode" into gLibraryStack
  if there is a file gLibraryStack then
    open invisible stack gLibraryStack
    start using "library"
    put empty into gLibraryStack
  end if
end startLibraryv1

command useLibraryv1 -- similar commands for libraryv2 and libraryv3
  send "closeCurrentLibrary" to this card in 1 millisec
  wait 5 millisec with messages
  send "startLibraryv1" to this card in 1 millisec
  wait 5 millisec with messages
end useLibraryv1

So when I use this such as:

<do some stuff>
useLibraryv2 -- generates a message in the IDE "another stack with same
name do you want to purge" message
<do some other stuff>

I get messages from LiveCode (in the IDE) that the previous library is
still in memory when I switch libraries and do I want to purge it.

What is the BEST way to close and remove a stack from memory and be sure
it is really and truly removed?

More information about the use-livecode mailing list