| Left: | ||
| Right: | 
| LEFT | RIGHT | 
|---|---|
| 1 /* | 1 /* | 
| 2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 
| 3 * Copyright (C) 2006-2015 Eyeo GmbH | 3 * Copyright (C) 2006-2016 Eyeo GmbH | 
| 
 
Oleksandr
2016/02/05 07:36:05
Nit: 2016
 
Eric
2016/02/08 17:34:07
Done.
 
 | |
| 4 * | 4 * | 
| 5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify | 
| 6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as | 
| 7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. | 
| 8 * | 8 * | 
| 9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, | 
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
| 12 * GNU General Public License for more details. | 12 * GNU General Public License for more details. | 
| 13 * | 13 * | 
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 180 EnsureInitialized(); | 180 EnsureInitialized(); | 
| 181 } | 181 } | 
| 182 | 182 | 
| 183 /** | 183 /** | 
| 184 * Start an initialization thread if not already initialized and no initializa tion thread exists. | 184 * Start an initialization thread if not already initialized and no initializa tion thread exists. | 
| 185 * | 185 * | 
| 186 * \par Postcondition | 186 * \par Postcondition | 
| 187 * - if returns, AlreadyStartedInitializer is true | 187 * - if returns, AlreadyStartedInitializer is true | 
| 188 * - if throws, AlreadyStartedInitializer is false | 188 * - if throws, AlreadyStartedInitializer is false | 
| 189 */ | 189 */ | 
| 190 void SpawnInitializer() | 190 void SpawnInitializer() | 
| 
 
Oleksandr
2016/02/01 02:47:09
The double checked locking is really convoluted he
 
Eric
2016/02/03 14:19:01
[...]
 
Oleksandr
2016/02/05 07:36:05
I am not convinced converting passive threads into
 
Eric
2016/02/08 17:34:07
There's no other place to throw it. You can't thro
 
Eric
2016/02/08 17:34:07
It's not what we want, at least not now.
The diff
 
 | |
| 191 { | 191 { | 
| 192 if (AlreadyInitialized() || AlreadyStartedInitializer()) | 192 if (AlreadyInitialized() || AlreadyStartedInitializer()) | 
| 193 { | 193 { | 
| 194 return; // fast-return path | 194 return; // fast-return path | 
| 195 } | 195 } | 
| 196 // Assert we have neither completed nor started an initialization thread | 196 // Assert we have neither completed nor started an initialization thread | 
| 197 /* | 197 /* | 
| 198 * Try to obtain a lock, giving us permission to start the initialization th read. | 198 * Try to obtain a lock, giving us permission to start the initialization th read. | 
| 199 * try_lock() is not reliable, that is, it can sometimes fail to lock when t he mutex is unlocked. | 199 * try_lock() is not reliable, that is, it can sometimes fail to lock when t he mutex is unlocked. | 
| 200 * It is, however, guaranteed to succeed eventually. | 200 * It is, however, guaranteed to succeed eventually. | 
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 249 { | 249 { | 
| 250 EnsureInitializedNoexcept(); | 250 EnsureInitializedNoexcept(); | 
| 251 if (initializerException) | 251 if (initializerException) | 
| 252 { | 252 { | 
| 253 std::rethrow_exception(initializerException); | 253 std::rethrow_exception(initializerException); | 
| 254 } | 254 } | 
| 255 } | 255 } | 
| 256 }; | 256 }; | 
| 257 | 257 | 
| 258 #endif // _DETACHED_INITIALIZATION_H_ | 258 #endif // _DETACHED_INITIALIZATION_H_ | 
| LEFT | RIGHT |