RE: Race conditions in HTML 5?

<57221E38FB4DD54C946CE654959A554D05DD00E784@GVW0436EXB.americas.hpqcorp.net>

Current votes: None.


------=_NextPart_000_00AB_01C8CB14.2C601D20
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: 7bit

Boris Zbarsky wrote:

> Bonner, Matt wrote:
> > I see several places in the HTML 5 spec, where a UA is required
> > to start executing something once all other scripts have stopped
> > executing. It seems possible that this could lead to race
> > conditions, or deadlock, depending on use.
> 
> Matt, for that to happen you have to have some code that 
> blocks on the result of the script execution, right?

For deadlock, yes; for race conditions, no. The race conditions are
caused by authors having no idea which of the dozen or so actions I
listed will happen in which order "once all scripts have stopped 
executing." 

> Given the primitives available to web script (no synchronization
> primitives of any kind), that basically means busy-looping on a
> boolean that's modified outside of the loop.

Or perhaps waiting on a server or network peer response? There are
also many parts of the Networking API that remain to be defined.

> But since the model exposed to JS is single-threaded, the value 
> of the boolean can't change during such a loop, so this technique
> doesn't work either (no matter what HTML5 specifies in terms of
> waiting for scripts  to finish executing).

If the boolean in function A() can't change, and it's waiting for a
script that won't start until A() stops, then you have deadlock. I
don't understand what you mean when you say that technique doesn't
work.

Worse still, if the author tested locally, and on browsers, 
script B() always executed before A(), the author will think her
page is ready to deploy.

Matt
--
Matt Bonner
Hewlett-Packard Company
 

> -----Original Message-----
> From: Boris Zbarsky [mailto:bzbarsky@MIT.EDU] 
> Sent: Monday, June 09, 2008 9:50 PM
> To: Bonner, Matt
> Cc: public-html@w3.org
> Subject: Re: Race conditions in HTML 5?
> 
> Bonner, Matt wrote:
> > I see several places in the HTML 5 spec, where a UA is required
> > to start executing something once all other scripts have stopped
> > executing. It seems possible that this could lead to race
> > conditions, or deadlock, depending on use.
> 
> Matt, for that to happen you have to have some code that 
> blocks on the result of
> the script execution, right?  Given the primitives available 
> to web script (no
> synchronization primitives of any kind), that basically means 
> busy-looping on a
> boolean that's modified outside of the loop.
> 
> But since the model exposed to JS is single-threaded, the 
> value of the boolean
> can't change during such a loop, so this technique doesn't 
> work either (no
> matter what HTML5 specifies in terms of waiting for scripts 
> to finish executing).
> 
> This lack of ways to block script execution means it's very 
> hard for web authors
> to shoot themselves in the foot here.
> 
> I suppose you could get more complicated situations in which 
> one script's
> execution immediately causes another script's execution, I 
> suppose, but I think
> part of the goal here is to prevent that: if a script adds 
> more scripts to the
> DOM, they won't execute until all currently executing scripts 
> are done.
> 
> -Boris
> 

------=_NextPart_000_00AB_01C8CB14.2C601D20
Content-Type: application/x-pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"

MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIN/jCCAwMw
ggJsAhEAuS9gzIifoXpGCbhbcGyKrzANBgkqhkiG9w0BAQUFADCBwTELMAkGA1UEBhMCVVMxFzAV
BgNVBAoTDlZlcmlTaWduLCBJbmMuMTwwOgYDVQQLEzNDbGFzcyAyIFB1YmxpYyBQcmltYXJ5IENl
cnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIxOjA4BgNVBAsTMShjKSAxOTk4IFZlcmlTaWduLCBJ
bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5l
dHdvcmswHhcNOTgwNTE4MDAwMDAwWhcNMjgwODAxMjM1OTU5WjCBwTELMAkGA1UEBhMCVVMxFzAV
BgNVBAoTDlZlcmlTaWduLCBJbmMuMTwwOgYDVQQLEzNDbGFzcyAyIFB1YmxpYyBQcmltYXJ5IENl
cnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIxOjA4BgNVBAsTMShjKSAxOTk4IFZlcmlTaWduLCBJ
bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5l
dHdvcmswgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKeIASF0LOcaA/CY4Zc8DyEI8Zzbl+ma
/MIEBhO+X1LIzB4sElYsuAFpLMyZH62wlq55BPITOcF7mLoILOjChBMsqmnpCfTHqQKkQsIjT0rY
8A6i+zFsyeZvmScH9eb0THiebetGhvq5hslU8rLEr9RGHFrJFTD/DWz1LQ5tzn93AgMBAAEwDQYJ
KoZIhvcNAQEFBQADgYEAci75f9HxcfvEnvbFXlGKQJi4aPibHIPY4p29/+2h5mbqLwn0ytfqpSuV
9iRghk1ELoOlxC2g0654aW9y2myuCPBjkjfmu8QwF613zEk1qs/Yj9G+txiWR3NqVCI0ZC22FptZ
W7RRWTqzCxT0Et9noPStMmResUZyJ4wSe8VEtK4wggQlMIIDjqADAgECAhB3lLeh2K9TSN0bRHs7
wmmDMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIElu
Yy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
dHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXpl
ZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAeFw0wMTA0MjQwMDAw
MDBaFw0xMTA0MjMyMzU5NTlaMIHiMSAwHgYDVQQKExdIZXdsZXR0LVBhY2thcmQgQ29tcGFueTEf
MB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazE7MDkGA1UECxMyVGVybXMgb2YgdXNlIGF0
IGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEgKGMpMDExMDAuBgNVBAsTJ0NsYXNzIDIgT25T
aXRlIEluZGl2aWR1YWwgU3Vic2NyaWJlciBDQTEuMCwGA1UEAxMlQ29sbGFib3JhdGlvbiBDZXJ0
aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwHBTCwUTa0hb
aHog6TMn4eE7398EjzwgM69HP+K7kNyVfFWph26qBIDYAZLebCYtGIb7k9yTmPRVIWAdYDgw28tQ
+Q8belgqEWmwzmv9ISTlEgFvOFLKc+cgI9/FKCiRN2QW12uHsugJhKBwNJ21zB7MDoEdBjGY1MyY
5T1+5TsCAwEAAaOB+jCB9zAPBgNVHRMECDAGAQH/AgEAMEQGA1UdIAQ9MDswOQYLYIZIAYb4RQEH
AQEwKjAoBggrBgEFBQcCARYcaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYTALBgNVHQ8EBAMC
AQYwEQYJYIZIAYb4QgEBBAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFQcml2YXRlTGFi
ZWwxLTM4MjA0BgNVHR8ELTArMCmgJ6AlhiNodHRwOi8vY3JsLnZlcmlzaWduLmNvbS9wY2EyLWcy
LmNybDAdBgNVHQ4EFgQU7+0gzUNFH4NHYBWWQ3JK5MbM5z0wDQYJKoZIhvcNAQEFBQADgYEAIC20
InJbjxHbFARQiJa3lZPqTCrVfV5vngYprhEGanLYRa9c6bf2tbkHdxBelAHWJaLSzZW6NF4K3fkq
NjtRHaR16iUovo4pRS6hJvUywmKS38AK5V6iAMcYf1n57MF3WcG2ZVeI97IUd9cYB0G8dY+vGp77
WZNqiQC9vwkPTzwwggbKMIIGM6ADAgECAhBPk6Ki6Rras1F66Yguaf1vMA0GCSqGSIb3DQEBBQUA
MIHiMSAwHgYDVQQKExdIZXdsZXR0LVBhY2thcmQgQ29tcGFueTEfMB0GA1UECxMWVmVyaVNpZ24g
VHJ1c3QgTmV0d29yazE7MDkGA1UECxMyVGVybXMgb2YgdXNlIGF0IGh0dHBzOi8vd3d3LnZlcmlz
aWduLmNvbS9ycGEgKGMpMDExMDAuBgNVBAsTJ0NsYXNzIDIgT25TaXRlIEluZGl2aWR1YWwgU3Vi
c2NyaWJlciBDQTEuMCwGA1UEAxMlQ29sbGFib3JhdGlvbiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
eTAeFw0wODAyMDEwMDAwMDBaFw0xMDAxMzEyMzU5NTlaMIGUMSAwHgYDVQQKFBdIZXdsZXR0LVBh
Y2thcmQgQ29tcGFueTEmMCQGA1UECxQdRW1wbG95bWVudCBTdGF0dXMgLSBFbXBsb3llZXMxDzAN
BgNVBAsUBlMvTUlNRTEUMBIGA1UEAxMLTWF0dCBCb25uZXIxITAfBgkqhkiG9w0BCQEWEm1hdHQu
Ym9ubmVyQGhwLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0/kcnFra+CFSBNbyzOI6
Ui2mJZ++NUV3Q5IlnjoBi/5ct6rjxlhYnJ8Vf21FsDIAH4K7YRTLvabE75aTLBREl8d/Xl6XiGFv
QWlUHs+keWmsAa/r7ndmykDESY1/KIGcIdwONL1iN6eVr94EKH/D/ED/48Q6xeYnv4V54dJsekcC
AwEAAaOCA8swggPHMDEGA1UdEQQqMCiBEm1hdHQuYm9ubmVyQGhwLmNvbYESbWF0dF9ib25uZXJA
aHAuY29tMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgWgMB8GA1UdIwQYMBaAFO/tIM1DRR+D
R2AVlkNySuTGzOc9MB0GA1UdDgQWBBTQy5kQUf4VijXLbptN/K1rL8Mb0DBXBgNVHR8EUDBOMEyg
SqBIhkZodHRwOi8vb25zaXRlY3JsLnZlcmlzaWduLmNvbS9IZXdsZXR0UGFja2FyZENvbXBhbnlT
TUlNRS9MYXRlc3RDUkwuY3JsMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMEMIIBPQYDVR0gBIIBNDCC
ATAwggEsBgtghkgBhvhFAQcXAjCCARswKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWdu
LmNvbS9DUFMwge4GCCsGAQUFBwICMIHhMB4WF0hld2xldHQtUGFja2FyZCBDb21wYW55MAMCAQIa
gb5BdXRob3JpdHkgdG8gYmluZCBIUCBkb2VzIG5vdCBjb3JyZXNwb25kIHdpdGggdXNlIG9yIHBv
c3Nlc3Npb24gb2YgdGhpcyBjZXJ0aWZpY2F0ZS4gSXNzdWVkIHRvIGZhY2lsaXRhdGUgY29tbXVu
aWNhdGlvbiB3aXRoIEhQLiBWZXJpU2lnbidzIENQUyBpbmNvcnAuIEJ5IHJlZmVyZW5jZSBsaWFi
LiBsdGQuIChjKTk3IFZlcmlTaWduMIIBMwYIKwYBBQUHAQEEggElMIIBITArBggrBgEFBQcwAYYf
aHR0cDovL29uc2l0ZS1vY3NwLnZlcmlzaWduLmNvbTCB8QYIKwYBBQUHMAKkgeQwgeExLjAsBgNV
BAMTJUNvbGxhYm9yYXRpb24gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMDAuBgNVBAsTJ0NsYXNz
IDIgT25TaXRlIEluZGl2aWR1YWwgU3Vic2NyaWJlciBDQTE6MDgGA1UECxMxVGVybXMgb2YgdXNl
IGF0IGh0dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEoYykwMTEfMB0GA1UECxMWVmVyaVNpZ24g
VHJ1c3QgTmV0d29yazEgMB4GA1UEChMXSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkwSwYJKoZIhvcN
AQkPBD4wPDAOBggqhkiG9w0DAgICAIAwDgYIKoZIhvcNAwICAgBAMA4GCCqGSIb3DQMEAgIAgDAK
BggqhkiG9w0DBzANBgkqhkiG9w0BAQUFAAOBgQCZmPmkd8gRbZu2WZ5tmxK5YNmbFTBDZo1fgdjh
x0/PdZwJXn5flC1C0lzdcH4BmvvcJFfqIfYgsYp2iz+UOTykz77Btq3WoT1lO/6wtr7v0uyk59Au
Wd0Seo0WiccEAN+g2Jy1YuIDT5SJNYUWvFnNN9rs1W0f+mfXImYypmivuTGCBIIwggR+AgEBMIH3
MIHiMSAwHgYDVQQKExdIZXdsZXR0LVBhY2thcmQgQ29tcGFueTEfMB0GA1UECxMWVmVyaVNpZ24g
VHJ1c3QgTmV0d29yazE7MDkGA1UECxMyVGVybXMgb2YgdXNlIGF0IGh0dHBzOi8vd3d3LnZlcmlz
aWduLmNvbS9ycGEgKGMpMDExMDAuBgNVBAsTJ0NsYXNzIDIgT25TaXRlIEluZGl2aWR1YWwgU3Vi
c2NyaWJlciBDQTEuMCwGA1UEAxMlQ29sbGFib3JhdGlvbiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
eQIQT5Oiouka2rNReumILmn9bzAJBgUrDgMCGgUAoIIC4DAYBgkqhkiG9w0BCQMxCwYJKoZIhvcN
AQcBMBwGCSqGSIb3DQEJBTEPFw0wODA2MTAyMzA4MDhaMCMGCSqGSIb3DQEJBDEWBBSjJ3H60IMG
x6WYkK7sMa/IlYcQMjBnBgkqhkiG9w0BCQ8xWjBYMAoGCCqGSIb3DQMHMA4GCCqGSIb3DQMCAgIA
gDANBggqhkiG9w0DAgIBQDAHBgUrDgMCBzANBggqhkiG9w0DAgIBKDAHBgUrDgMCGjAKBggqhkiG
9w0CBTCCAQgGCSsGAQQBgjcQBDGB+jCB9zCB4jEgMB4GA1UEChMXSGV3bGV0dC1QYWNrYXJkIENv
bXBhbnkxHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9m
IHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTAxMTAwLgYDVQQLEydDbGFz
cyAyIE9uU2l0ZSBJbmRpdmlkdWFsIFN1YnNjcmliZXIgQ0ExLjAsBgNVBAMTJUNvbGxhYm9yYXRp
b24gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkCEE+ToqLpGtqzUXrpiC5p/W8wggEKBgsqhkiG9w0B
CRACCzGB+qCB9zCB4jEgMB4GA1UEChMXSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkxHzAdBgNVBAsT
FlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczov
L3d3dy52ZXJpc2lnbi5jb20vcnBhIChjKTAxMTAwLgYDVQQLEydDbGFzcyAyIE9uU2l0ZSBJbmRp
dmlkdWFsIFN1YnNjcmliZXIgQ0ExLjAsBgNVBAMTJUNvbGxhYm9yYXRpb24gQ2VydGlmaWNhdGlv
biBBdXRob3JpdHkCEE+ToqLpGtqzUXrpiC5p/W8wDQYJKoZIhvcNAQEBBQAEgYBpZ6k17HNLauk5
IUFjZjfgI1DJt25Y8sewi0eZNJB/HSNBFcmxNxf9QoJeR/G9itiV3Kod4AOSxYpWxGPBR/ZoZ4M2
6cHNJ7iWyinG9HiV5zP2y66quhgawlOabFBhUPirvZTwGUI1ieMEc9C1oKLHm2oSt802xYYgqOZP
wcXwFgAAAAAAAA==

------=_NextPart_000_00AB_01C8CB14.2C601D20--