1.4 Interaction between Lisp and hqn_lsd

Note that the following description applies equally to the Lisp image and to any layered products.

Each time you start your image (or load a layered product, like CLIM, into an already running image) a check is made to ensure that you do have a valid license for the product in question. Depending on the value of the
UNIX
environment variable
LW_CHECK_NETWORK
, or the Lisp variable
sys:*check-network-server*
, the system will check for standalone keys (that is, in keyfiles); if any keyfile check fails and network licensing has been enabled, then the system will request a license from
hqn_lsd
.

LW_CHECK_NETWORK
can take any of the following values, which are case-insensitive:

No

Do not attempt to contact the License Server.

Only

Only try the License Server; do not try the keyfile.

Any other value

Try keyfiles first and then the Licence Server, if necessary.

The main use of the environment variable is to allow you to configure your image without reading local configuration files into Lisp first, which would require the extra step of requesting a keyfile from LispWorks Ltd.

If
LW_CHECK_NETWORK
is not set, the action is controlled by the value of
sys:*check-network-server*
. This, in turn, can take the following values:

nil

Do not attempt to contact License Server.

:only

Only try the License Server; do not try the keyfile.

Any other non-
nil
value

Try keyfiles first and then the License Server if necessary.

The number of licenses issued by LispWorks Ltd to each customer site corresponds to the number of Lisp processes which may be simultaneously active at that site. As a general rule, they may be run on any machines at that site. This differs from the standalone system in two ways:

Under the standalone system, Lisp processes may only be run on licensed machines

Under the standalone system, any number of processes may run on each licensed machine (resources permitting)

Once a license has been granted to a running Lisp image by
hqn_lsd
it remains assigned to that
UNIX
process until the process terminates. If Lisp terminates normally--for instance by calling
(lw:quit)
or the editor command
Save All Files And Exit
--then the license will be released for reuse, automatically and immediately.

On the other hand, if Lisp terminates abnormally (for example, it was killed externally) then the license will not be released upon termination. However the License Server will notice within 10 minutes that the Lisp process has stopped confirming its license, and at this point the daemon itself will release the license.

The administration tool,
hqn_lsa
(see The License Server Admin Tool) can be used at any time to release any license. If this license belongs to a process that has terminated abnormally then it can now be reused. If the license belongs to an active Lisp process then that process will request a new license from the server daemon.

If a running Lisp image is stopped (with
Ctrl+Z
) or spends a very long time garbage collecting, then the License Server may detect that the image is no longer active and release its license. In the normal course of events, the image will automatically request a new license from the server daemon as soon as it becomes active again.

If, for whatever reason, a running image requests a new license because its old one cannot be found (for example, it has been released externally, or the License Server and its backups cannot be contacted) then

If the request is successful, the user will not be informed that the transaction ever took place.

If the request is unsuccessful, a warning message will be written to
*terminal-io*
, and the image will continue. The image will automatically make regular attempts to regain the license.

A typical example:

;; *** License for LispWorks lost - access to this software

;; disabled.

;; *** LispWorks is regularly checking for a license to become

;; available.

This may be followed later by the message

;; *** License for LispWorks recovered.

If the request is unsuccessful because all possible licenses have been assigned to other users, then a list of active users will be printed.