I can't speak for MetaCard's behavior here, although my hope would be that it gives you an error message when you try to perform the second write.

However, what you are generally referring to would be acquiring a write lock on the stack, which is something you can manage yourself. It's mostly as simple as it would seem- you just need to be able to communicate some sort of global flag that you scripts can check.

For example:

## check if another script has a write lock
put isLocked() into someFlag
put the seconds into startTime

repeat until (someFlag is FALSE) or (timeElapsed > 10)
   ## wait until it's available
   put isLocked() into someFlag
   put the seconds - startTime into timeElapsed
end repeat

if (someFlag is TRUE) then
   put "Error: scripts too busy, couldn't write for 10 seconds!"
else
   lockStack
   writeToStack
   unlockStack
end if

You could implement the lock/unlock through an external file, say:

function isLocked
  return (there is a file "mc.lock")
end isLocked

on lockStack
   put empty into url "file:mc.lock"
end lockStack

on unlockStack
   delete file "mc.lock"
end unlockStack

There are more efficient ways to do locking, but this seems appropriate here.

HTH,
Brian

And, more importantly, what steps could be taken in a cgi script to make
this approach work, if any? Like, if a stack was currently being written
to, would darwin mc know that? Is there some message returned like "stack
is in use" or something that you could trap for? And maybe make your own
timeout?

_______________________________________________ metacard mailing list [EMAIL PROTECTED] http://lists.runrev.com/mailman/listinfo/metacard

Reply via email to