| 275 | } |
| 276 | |
| 277 | void DObject::Release() |
| 278 | { |
| 279 | DObject **probe; |
| 280 | |
| 281 | // Unlink this object from the GC list. |
| 282 | for (probe = &GC::Root; *probe != NULL; probe = &((*probe)->ObjNext)) |
| 283 | { |
| 284 | if (*probe == this) |
| 285 | { |
| 286 | *probe = ObjNext; |
| 287 | if (&ObjNext == GC::SweepPos) |
| 288 | { |
| 289 | GC::SweepPos = probe; |
| 290 | } |
| 291 | break; |
| 292 | } |
| 293 | } |
| 294 | |
| 295 | // If it's gray, also unlink it from the gray list. |
| 296 | if (this->IsGray()) |
| 297 | { |
| 298 | for (probe = &GC::Gray; *probe != NULL; probe = &((*probe)->GCNext)) |
| 299 | { |
| 300 | if (*probe == this) |
| 301 | { |
| 302 | *probe = GCNext; |
| 303 | break; |
| 304 | } |
| 305 | } |
| 306 | } |
| 307 | ObjNext = nullptr; |
| 308 | GCNext = nullptr; |
| 309 | ObjectFlags |= OF_Released; |
| 310 | } |
| 311 | |
| 312 | //========================================================================== |
| 313 | // |
no test coverage detected