Changeset 25201 in vbox
- Timestamp:
- Dec 4, 2009 6:52:36 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 55682
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/settings.h
r24364 r25201 262 262 {} 263 263 264 bool operator==(const BIOSSettings &d) const 265 { 266 return ( this == &d 267 || ( fACPIEnabled == d.fACPIEnabled 268 && fIOAPICEnabled == d.fIOAPICEnabled 269 && fLogoFadeIn == d.fLogoFadeIn 270 && fLogoFadeOut == d.fLogoFadeOut 271 && ulLogoDisplayTime == d.ulLogoDisplayTime 272 && strLogoImagePath == d.strLogoImagePath 273 && biosBootMenuMode == d.biosBootMenuMode 274 && fPXEDebugEnabled == d.fPXEDebugEnabled 275 && llTimeOffset == d.llTimeOffset) 276 ); 277 } 278 264 279 bool fACPIEnabled, 265 280 fIOAPICEnabled, -
trunk/src/VBox/Main/BIOSSettingsImpl.cpp
r25149 r25201 28 28 #include <VBox/settings.h> 29 29 30 //////////////////////////////////////////////////////////////////////////////// 31 // 32 // BIOSSettings private data definition 33 // 34 //////////////////////////////////////////////////////////////////////////////// 35 36 struct BIOSSettings::Data 37 { 38 Data() 39 { } 40 41 ComObjPtr<Machine, ComWeakRef> pMachine; 42 ComObjPtr<BIOSSettings> pPeer; 43 44 // use the XML settings structure in the members for simplicity 45 Backupable<settings::BIOSSettings> bd; 46 }; 47 30 48 // constructor / destructor 31 49 ///////////////////////////////////////////////////////////////////////////// … … 49 67 * @returns COM result indicator 50 68 */ 51 HRESULT BIOSSettings::init 69 HRESULT BIOSSettings::init(Machine *aParent) 52 70 { 53 71 LogFlowThisFuncEnter(); … … 60 78 AssertReturn(autoInitSpan.isOk(), E_FAIL); 61 79 80 m = new Data(); 81 62 82 /* share the parent weakly */ 63 unconst(m Parent) = aParent;64 65 m Data.allocate();83 unconst(m->pMachine) = aParent; 84 85 m->bd.allocate(); 66 86 67 87 autoInitSpan.setSucceeded(); … … 79 99 * it shares data with is destroyed. 80 100 */ 81 HRESULT BIOSSettings::init 101 HRESULT BIOSSettings::init(Machine *aParent, BIOSSettings *that) 82 102 { 83 103 LogFlowThisFuncEnter(); … … 90 110 AssertReturn(autoInitSpan.isOk(), E_FAIL); 91 111 92 mParent = aParent; 93 mPeer = that; 94 95 AutoWriteLock thatlock (that); 96 mData.share (that->mData); 112 m = new Data(); 113 114 m->pMachine = aParent; 115 m->pPeer = that; 116 117 AutoWriteLock thatlock(that); 118 m->bd.share(that->m->bd); 97 119 98 120 autoInitSpan.setSucceeded(); … … 107 129 * of the original object passed as an argument. 108 130 */ 109 HRESULT BIOSSettings::initCopy 131 HRESULT BIOSSettings::initCopy(Machine *aParent, BIOSSettings *that) 110 132 { 111 133 LogFlowThisFuncEnter(); … … 118 140 AssertReturn(autoInitSpan.isOk(), E_FAIL); 119 141 120 mParent = aParent; 142 m = new Data(); 143 144 m->pMachine = aParent; 121 145 // mPeer is left null 122 146 123 147 AutoWriteLock thatlock (that); 124 m Data.attachCopy (that->mData);148 m->bd.attachCopy(that->m->bd); 125 149 126 150 autoInitSpan.setSucceeded(); … … 143 167 return; 144 168 145 mData.free(); 146 147 mPeer.setNull(); 148 mParent.setNull(); 169 m->bd.free(); 170 171 m->pPeer.setNull(); 172 m->pMachine.setNull(); 173 174 delete m; 175 m = NULL; 149 176 150 177 LogFlowThisFuncLeave(); … … 164 191 AutoReadLock alock(this); 165 192 166 *enabled = m Data->mLogoFadeIn;193 *enabled = m->bd->fLogoFadeIn; 167 194 168 195 return S_OK; … … 175 202 176 203 /* the machine needs to be mutable */ 177 Machine::AutoMutableStateDependency adep(m Parent);178 if (FAILED(adep.rc())) return adep.rc(); 179 180 AutoWriteLock alock(this); 181 182 m Data.backup();183 m Data->mLogoFadeIn = enable;204 Machine::AutoMutableStateDependency adep(m->pMachine); 205 if (FAILED(adep.rc())) return adep.rc(); 206 207 AutoWriteLock alock(this); 208 209 m->bd.backup(); 210 m->bd->fLogoFadeIn = enable; 184 211 185 212 return S_OK; … … 196 223 AutoReadLock alock(this); 197 224 198 *enabled = m Data->mLogoFadeOut;225 *enabled = m->bd->fLogoFadeOut; 199 226 200 227 return S_OK; … … 207 234 208 235 /* the machine needs to be mutable */ 209 Machine::AutoMutableStateDependency adep(m Parent);210 if (FAILED(adep.rc())) return adep.rc(); 211 212 AutoWriteLock alock(this); 213 214 m Data.backup();215 m Data->mLogoFadeOut = enable;236 Machine::AutoMutableStateDependency adep(m->pMachine); 237 if (FAILED(adep.rc())) return adep.rc(); 238 239 AutoWriteLock alock(this); 240 241 m->bd.backup(); 242 m->bd->fLogoFadeOut = enable; 216 243 217 244 return S_OK; … … 228 255 AutoReadLock alock(this); 229 256 230 *displayTime = m Data->mLogoDisplayTime;257 *displayTime = m->bd->ulLogoDisplayTime; 231 258 232 259 return S_OK; … … 239 266 240 267 /* the machine needs to be mutable */ 241 Machine::AutoMutableStateDependency adep(m Parent);242 if (FAILED(adep.rc())) return adep.rc(); 243 244 AutoWriteLock alock(this); 245 246 m Data.backup();247 m Data->mLogoDisplayTime = displayTime;268 Machine::AutoMutableStateDependency adep(m->pMachine); 269 if (FAILED(adep.rc())) return adep.rc(); 270 271 AutoWriteLock alock(this); 272 273 m->bd.backup(); 274 m->bd->ulLogoDisplayTime = displayTime; 248 275 249 276 return S_OK; … … 260 287 AutoReadLock alock(this); 261 288 262 m Data->mLogoImagePath.cloneTo(imagePath);289 m->bd->strLogoImagePath.cloneTo(imagePath); 263 290 return S_OK; 264 291 } … … 274 301 275 302 /* the machine needs to be mutable */ 276 Machine::AutoMutableStateDependency adep(m Parent);277 if (FAILED(adep.rc())) return adep.rc(); 278 279 AutoWriteLock alock(this); 280 281 m Data.backup();282 m Data->mLogoImagePath = imagePath;303 Machine::AutoMutableStateDependency adep(m->pMachine); 304 if (FAILED(adep.rc())) return adep.rc(); 305 306 AutoWriteLock alock(this); 307 308 m->bd.backup(); 309 m->bd->strLogoImagePath = imagePath; 283 310 284 311 return S_OK; … … 295 322 AutoReadLock alock(this); 296 323 297 *bootMenuMode = m Data->mBootMenuMode;324 *bootMenuMode = m->bd->biosBootMenuMode; 298 325 return S_OK; 299 326 } … … 305 332 306 333 /* the machine needs to be mutable */ 307 Machine::AutoMutableStateDependency adep(m Parent);308 if (FAILED(adep.rc())) return adep.rc(); 309 310 AutoWriteLock alock(this); 311 312 m Data.backup();313 m Data->mBootMenuMode = bootMenuMode;334 Machine::AutoMutableStateDependency adep(m->pMachine); 335 if (FAILED(adep.rc())) return adep.rc(); 336 337 AutoWriteLock alock(this); 338 339 m->bd.backup(); 340 m->bd->biosBootMenuMode = bootMenuMode; 314 341 315 342 return S_OK; … … 326 353 AutoReadLock alock(this); 327 354 328 *enabled = m Data->mACPIEnabled;355 *enabled = m->bd->fACPIEnabled; 329 356 330 357 return S_OK; … … 337 364 338 365 /* the machine needs to be mutable */ 339 Machine::AutoMutableStateDependency adep(m Parent);340 if (FAILED(adep.rc())) return adep.rc(); 341 342 AutoWriteLock alock(this); 343 344 m Data.backup();345 m Data->mACPIEnabled = enable;366 Machine::AutoMutableStateDependency adep(m->pMachine); 367 if (FAILED(adep.rc())) return adep.rc(); 368 369 AutoWriteLock alock(this); 370 371 m->bd.backup(); 372 m->bd->fACPIEnabled = enable; 346 373 347 374 return S_OK; … … 358 385 AutoReadLock alock(this); 359 386 360 *enabled = m Data->mIOAPICEnabled;387 *enabled = m->bd->fIOAPICEnabled; 361 388 362 389 return S_OK; … … 369 396 370 397 /* the machine needs to be mutable */ 371 Machine::AutoMutableStateDependency adep(m Parent);372 if (FAILED(adep.rc())) return adep.rc(); 373 374 AutoWriteLock alock(this); 375 376 m Data.backup();377 m Data->mIOAPICEnabled = enable;398 Machine::AutoMutableStateDependency adep(m->pMachine); 399 if (FAILED(adep.rc())) return adep.rc(); 400 401 AutoWriteLock alock(this); 402 403 m->bd.backup(); 404 m->bd->fIOAPICEnabled = enable; 378 405 379 406 return S_OK; … … 390 417 AutoReadLock alock(this); 391 418 392 *enabled = m Data->mPXEDebugEnabled;419 *enabled = m->bd->fPXEDebugEnabled; 393 420 394 421 return S_OK; … … 401 428 402 429 /* the machine needs to be mutable */ 403 Machine::AutoMutableStateDependency adep(m Parent);404 if (FAILED(adep.rc())) return adep.rc(); 405 406 AutoWriteLock alock(this); 407 408 m Data.backup();409 m Data->mPXEDebugEnabled = enable;430 Machine::AutoMutableStateDependency adep(m->pMachine); 431 if (FAILED(adep.rc())) return adep.rc(); 432 433 AutoWriteLock alock(this); 434 435 m->bd.backup(); 436 m->bd->fPXEDebugEnabled = enable; 410 437 411 438 return S_OK; … … 422 449 AutoReadLock alock(this); 423 450 424 *offset = m Data->mTimeOffset;451 *offset = m->bd->llTimeOffset; 425 452 426 453 return S_OK; … … 433 460 434 461 /* the machine needs to be mutable */ 435 Machine::AutoMutableStateDependency adep(m Parent);436 if (FAILED(adep.rc())) return adep.rc(); 437 438 AutoWriteLock alock(this); 439 440 m Data.backup();441 m Data->mTimeOffset = offset;462 Machine::AutoMutableStateDependency adep(m->pMachine); 463 if (FAILED(adep.rc())) return adep.rc(); 464 465 AutoWriteLock alock(this); 466 467 m->bd.backup(); 468 m->bd->llTimeOffset = offset; 442 469 443 470 return S_OK; … … 466 493 AutoWriteLock alock(this); 467 494 468 mData->mACPIEnabled = data.fACPIEnabled; 469 mData->mIOAPICEnabled = data.fIOAPICEnabled; 470 471 mData->mLogoFadeIn = data.fLogoFadeIn; 472 mData->mLogoFadeOut = data.fLogoFadeOut; 473 mData->mLogoDisplayTime = data.ulLogoDisplayTime; 474 mData->mLogoImagePath = data.strLogoImagePath; 475 476 mData->mBootMenuMode = data.biosBootMenuMode; 477 478 mData->mPXEDebugEnabled = data.fPXEDebugEnabled; 479 mData->mTimeOffset = data.llTimeOffset; 495 // simply copy 496 *m->bd.data() = data; 480 497 481 498 return S_OK; … … 496 513 AutoReadLock alock(this); 497 514 498 data.fACPIEnabled = !!mData->mACPIEnabled; 499 data.fIOAPICEnabled = !!mData->mIOAPICEnabled; 500 501 data.fLogoFadeIn = !!mData->mLogoFadeIn; 502 data.fLogoFadeOut = !!mData->mLogoFadeOut; 503 data.ulLogoDisplayTime = mData->mLogoDisplayTime; 504 data.strLogoImagePath = mData->mLogoImagePath; 505 506 data.biosBootMenuMode = mData->mBootMenuMode; 507 data.fPXEDebugEnabled = !!mData->mPXEDebugEnabled; 508 data.llTimeOffset = mData->mTimeOffset; 509 510 return S_OK; 515 data = *m->bd.data(); 516 517 return S_OK; 518 } 519 520 bool BIOSSettings::isModified() 521 { 522 AutoReadLock alock (this); 523 return m->bd.isBackedUp(); 524 } 525 526 bool BIOSSettings::isReallyModified() 527 { 528 AutoReadLock alock (this); 529 return m->bd.hasActualChanges(); 530 } 531 532 void BIOSSettings::rollback() 533 { 534 AutoWriteLock alock (this); 535 m->bd.rollback(); 511 536 } 512 537 … … 515 540 /* sanity */ 516 541 AutoCaller autoCaller(this); 517 AssertComRCReturnVoid 542 AssertComRCReturnVoid(autoCaller.rc()); 518 543 519 544 /* sanity too */ 520 AutoCaller peerCaller (mPeer);521 AssertComRCReturnVoid 545 AutoCaller peerCaller(m->pPeer); 546 AssertComRCReturnVoid(peerCaller.rc()); 522 547 523 548 /* lock both for writing since we modify both (mPeer is "master" so locked 524 549 * first) */ 525 AutoMultiWriteLock2 alock (mPeer, this);526 527 if (m Data.isBackedUp())550 AutoMultiWriteLock2 alock(m->pPeer, this); 551 552 if (m->bd.isBackedUp()) 528 553 { 529 m Data.commit();530 if (m Peer)554 m->bd.commit(); 555 if (m->pPeer) 531 556 { 532 557 /* attach new data to the peer and reshare it */ 533 AutoWriteLock peerlock (mPeer);534 m Peer->mData.attach (mData);558 AutoWriteLock peerlock(m->pPeer); 559 m->pPeer->m->bd.attach(m->bd); 535 560 } 536 561 } … … 551 576 /* peer is not modified, lock it for reading (aThat is "master" so locked 552 577 * first) */ 553 AutoMultiLock2 alock 578 AutoMultiLock2 alock(aThat->rlock(), this->wlock()); 554 579 555 580 /* this will back up current data */ 556 m Data.assignCopy (aThat->mData);581 m->bd.assignCopy(aThat->m->bd); 557 582 } 558 583 … … 568 593 569 594 /* Initialize default BIOS settings here */ 570 mData->mIOAPICEnabled = aOsType->recommendedIOAPIC(); 571 } 595 m->bd->fIOAPICEnabled = aOsType->recommendedIOAPIC(); 596 } 597 572 598 /* vi: set tabstop=4 shiftwidth=4 expandtab: */ -
trunk/src/VBox/Main/include/BIOSSettingsImpl.h
r24989 r25201 42 42 { 43 43 public: 44 45 struct Data46 {47 Data()48 {49 mLogoFadeIn = true;50 mLogoFadeOut = true;51 mLogoDisplayTime = 0;52 mBootMenuMode = BIOSBootMenuMode_MessageAndMenu;53 mACPIEnabled = true;54 mIOAPICEnabled = false;55 mPXEDebugEnabled = false;56 mTimeOffset = 0;57 }58 59 bool operator== (const Data &that) const60 {61 return this == &that ||62 (mLogoFadeIn == that.mLogoFadeIn &&63 mLogoFadeOut == that.mLogoFadeOut &&64 mLogoDisplayTime == that.mLogoDisplayTime &&65 mLogoImagePath == that.mLogoImagePath &&66 mBootMenuMode == that.mBootMenuMode &&67 mACPIEnabled == that.mACPIEnabled &&68 mIOAPICEnabled == that.mIOAPICEnabled &&69 mPXEDebugEnabled == that.mPXEDebugEnabled &&70 mTimeOffset == that.mTimeOffset);71 }72 73 BOOL mLogoFadeIn;74 BOOL mLogoFadeOut;75 ULONG mLogoDisplayTime;76 Bstr mLogoImagePath;77 BIOSBootMenuMode_T mBootMenuMode;78 BOOL mACPIEnabled;79 BOOL mIOAPICEnabled;80 BOOL mPXEDebugEnabled;81 LONG64 mTimeOffset;82 };83 84 44 DECLARE_NOT_AGGREGATABLE(BIOSSettings) 85 45 … … 125 85 HRESULT saveSettings(settings::BIOSSettings &data); 126 86 127 bool isModified() { AutoWriteLock alock (this); return mData.isBackedUp(); }128 bool isReallyModified() { AutoWriteLock alock (this); return mData.hasActualChanges(); }129 void rollback() { AutoWriteLock alock (this); mData.rollback(); }87 bool isModified(); 88 bool isReallyModified(); 89 void rollback(); 130 90 void commit(); 131 91 void copyFrom (BIOSSettings *aThat); … … 136 96 137 97 private: 138 139 ComObjPtr<Machine, ComWeakRef> mParent; 140 ComObjPtr<BIOSSettings> mPeer; 141 Backupable<Data> mData; 98 struct Data; 99 Data *m; 142 100 }; 143 101
Note:
See TracChangeset
for help on using the changeset viewer.