I mis-typed the last section, so let me try again

...

So the next piece of protection is to increment/decrement user$active 
instead of just set/clear.  

Now we do:
if (user$active>0)
     return a page saying, "sorry, you have a request pending, try again"
else
     user$active=user$active+1
if  (user$active=1)
     process stuff
else
     abort this transaction.
endif
user$active=user$active-1
return

So we can abort if some other thread has insinuated itself.  To be extra 
safe, just before the return, we should verify that user$active=0.  If 
not, dump everything to the log and email the programmer!  


>It seems to me the issue is whether an action is atomic (kind of like a 
>transaction).  Similar to other critical code sections that can't be 
>interrupted.
>
>So some kind of semaphore needs to be used on the server (e.g. 
>user$active) and associated with a user's state variables on the client, 
>for example:  userreferenceargument.
>
>So each critical taf begins:
>if (user$active)
>     return a page saying, "sorry, you have a request pending, try again"
>else
>     set user$active
>endif
>process stuff
>clear user$active
>return
>
>Now at least any variables changed by the taf are complete and consistent 
>(assuming the underlying taf is properly written).
>
>So this of course requires that the if--else structure is atomic, and if 
>we were writing a device driver, we would turn off interrupts.  I'm not 
>aware of any mechanism in wiTango to assure this, so it is still 
>conceiveable that two requests could both set user$active (particularly 
>with a concurrent thread environment).
>
>So the next piece of protection is to increment/decrement user$active 
>instead of just set/clear.  
>
>Now we do:
>if (user$active=0)
>     return a page saying, "sorry, you have a request pending, try again"
>else
>     user$active=user$active+1
>if  (user$active=1)
>     process stuff
>else
>     abort this transaction.
>endif
>user$active=user$active-1
>return
>
>So we can abort if some other thread has insuated itself.  To be extra 
>safe, just before the return, we should verify that user$active=0.  If 
>not, dump everything to the log and email the programmer!  
>
>>I can agree with that statement. I've found this to be the case the hard 
>>way. I have a control panel script that has a bunch of forms on it that 
>>consist of submit buttons that toggle a control on or off (0 or 1) and 
>>based on that setting I will update vars of different scopes. Some of 
>>these buttons are dependant upon their a variable in some scope being set. 
>>What I have done is built a set of what I call require which are small 
>>tafs that check to see if the variables in a specific scope are still 
>>valid. This is usually like the 1 or second action in all my tafs. I call 
>>it using a branch and return from branch function. this is really just and 
>>an if else decision tree checking the variables in some prescribed 
>>hierarchy I usually start at the top with Server, application, and Domain 
>>scope and then move down through the User and Local vars. If any of these 
>>vars are proven to be invalid I reload the variable in question from the 
>>db with a dbms call to the table where that variable is stored. and then 
>>continue through the tree.  This is tricky with locals as most of the time 
>>locals are generated consumed and destroyed too fast to make a difference 
>>or are not generated by some db setting so in that case too bad, soo sad. 
>>But what this provides is a first line of defense to the "unpredictable" 
>>results that Robert alluded to by forcing the taf to decide if all the 
>>vars are still valid before getting to the page.
>>csmith        
>>
>>----- Original Message ----- 
>>  From: Robert S. Sfeir 
>>  To: Multiple recipients of list witango-talk 
>>  Sent: Tuesday, September 24, 2002 7:43 PM
>>  Subject: Re: Witango-Talk: a random question
>>
>>
>>  This depends on how far down the taf the app server went, so you might 
>>get some of it, and it might ignore some.  In other words it's not going 
>>to be pretty if you're counting on specific vars to be set before button 2 
>>gets clicked because the results will be unpredictable.
>>
>>  R
>>    ----- Original Message ----- 
>>    From: Alan Wolfe 
>>    To: Multiple recipients of list witango-talk 
>>    Sent: Tuesday, September 24, 2002 7:42 PM
>>    Subject: Witango-Talk: a random question
>>
>>
>>    hello, this kind of trivial but i was wondering what happens w/ tango 
>>if i as a user click a button on a form so it submits that form but before 
>>the page it brings up can load i click a different button.  If the first 
>>one changes user scope vars and such, will they be changed when the second 
>>button's page is loaded?
>>
>
>
>Bill Conlon
>
>To the Point
>345 California Avenue Suite 2
>Palo Alto, CA 94306
>
>office: 650.327.2175
>fax:    650.329.8335
>mobile: 650.906.9929
>e-mail: mailto:[EMAIL PROTECTED]
>web:    http://www.tothept.com
>
>
>________________________________________________________________________
>TO UNSUBSCRIBE: send a plain text/US ASCII email to [EMAIL PROTECTED]
>                with unsubscribe witango-talk in the message body
>


Bill Conlon

To the Point
345 California Avenue Suite 2
Palo Alto, CA 94306

office: 650.327.2175
fax:    650.329.8335
mobile: 650.906.9929
e-mail: mailto:[EMAIL PROTECTED]
web:    http://www.tothept.com


________________________________________________________________________
TO UNSUBSCRIBE: send a plain text/US ASCII email to [EMAIL PROTECTED]
                with unsubscribe witango-talk in the message body

Reply via email to