[Glass] Printer spooler and TransientSemaphore wait

Paul DeBruicker via Glass glass at lists.gemtalksystems.com
Tue Jul 10 13:46:38 PDT 2018


Also the GemStone seaside package 'Seaside-GemStone-ServiceTask' can manage
the polling James is talking about.  It checks every 200ms for tasks to do. 
The tasks are defined in the class side of WAGemStoneServiceVMTask.  See
#serviceVMTaskServiceExample for an example.

Once you add a task of your own you'd need to restart the servicevm gem.

The daemontools repo has the code to set up & run the servicevm






GLASS mailing list wrote
> Dario,
> 
> Are you intending the semaphore to work between gems? If so, then it won’t
> work. A semaphore is “DbTransient,” meaning that its state is not
> persistent in the database. A Smalltalk Semaphore works only inside a
> single virtual machine (Gem).
> 
> Instead, it should be sufficient for you to use GemStone’s transaction
> semantics. A “producer” adds and item to an RcQueue and commits, while a
> “consumer” periodically aborts and looks to see if the queue is non-empty.
> For simplicity, the consumer should have a delay in its polling loop.
> 
> James
> 
>> On Jul 10, 2018, at 8:17 AM, 

> dario.trussardi@

>  via Glass <

> glass at .gemtalksystems

> > wrote:
>> 
>> Ciao,
>> 
>>     in the application based on Seaside, i manage some printers devices.
>> 
>> 	Every device have a RcQueue where the system add the 'works' to print. 
>> 
>> 	Besides there is a topaz script/server, which read the prints jobs and
>> does the printing.
>> 
>>     Now this script is based spoolSemaphore class variable set to on
>> TransientSemaphore, 
>>         who waits for the presence of a new document to be reported,
>> 
>> 	segnaled when one relative entry is added to one RcQueue printer device.
>> 
>> 
>> 
>> 	This is the printerSpool script:
>> 
>>   startPrinterSpool
>>   | cllDbSpoolerActive flagLo......................  |
>> 
>>   UserGlobals at: #'FlagSpooler' put: true.
>> 
>>   spoolSemaphore := TransientSemaphore new.
>>  
>> 
>>      [ UserGlobals at: #'FlagSpooler' ]
>>         whileTrue: [ 
>>               spoolSemaphore  waitForSeconds: 1.
>>               
>>             System commit. " Update the session data "
>>             counterLimit := DTRdbOperatingDevice ticktesForCicle.
>> 
>>             ....................
>> 
>>             .............
>>          If in the whileTrue loop i define the:
>> 
>>               spoolSemaphore  waitForSeconds: 1.
>> 
>>         the topaz script works, but not waiting  as I would like .....
>> 
>> 	If in the whileTrue loop i define the:
>> 
>>               spoolSemaphore  wait.
>> 
>>         the topaz script generates the error:
>> 
>> 	ERROR 2366 , a ThreadError occurred (error 2366),
>> reason:rtErrSchedulerDeadlocked, The ProcessorScheduler is deadlocked
>> (ThreadError)
>> 
>>  
>> 	Considerations... ?
>> 
>> 	Thanks,
>> 
>> 		Dario
>> 
>> _______________________________________________
>> Glass mailing list
>> 

> Glass at .gemtalksystems

>> http://lists.gemtalksystems.com/mailman/listinfo/glass
> 
> 
> _______________________________________________
> Glass mailing list

> Glass at .gemtalksystems

> http://lists.gemtalksystems.com/mailman/listinfo/glass





--
Sent from: http://forum.world.st/GLASS-f1460844.html


More information about the Glass mailing list