equal
deleted
inserted
replaced
102 deallocate(t); |
102 deallocate(t); |
103 return; |
103 return; |
104 } |
104 } |
105 assert(t->empty(), "invariant"); |
105 assert(t->empty(), "invariant"); |
106 assert(!t->retired(), "invariant"); |
106 assert(!t->retired(), "invariant"); |
|
107 assert(!t->excluded(), "invariant"); |
107 assert(t->identity() == NULL, "invariant"); |
108 assert(t->identity() == NULL, "invariant"); |
108 if (!should_populate_cache()) { |
109 if (!should_populate_cache()) { |
109 remove_free(t); |
110 remove_free(t); |
110 assert(!_free.in_list(t), "invariant"); |
111 assert(!_free.in_list(t), "invariant"); |
111 deallocate(t); |
112 deallocate(t); |
344 } |
345 } |
345 |
346 |
346 template <typename Mspace> |
347 template <typename Mspace> |
347 inline bool ReleaseOp<Mspace>::process(typename Mspace::Type* t) { |
348 inline bool ReleaseOp<Mspace>::process(typename Mspace::Type* t) { |
348 assert(t != NULL, "invariant"); |
349 assert(t != NULL, "invariant"); |
349 if (t->retired() || t->try_acquire(_thread)) { |
350 // assumes some means of exclusive access to t |
350 if (t->transient()) { |
351 if (t->transient()) { |
351 if (_release_full) { |
352 if (_release_full) { |
352 mspace_release_full_critical(t, _mspace); |
353 mspace_release_full_critical(t, _mspace); |
353 } else { |
354 } else { |
354 mspace_release_free_critical(t, _mspace); |
355 mspace_release_free_critical(t, _mspace); |
355 } |
|
356 return true; |
|
357 } |
356 } |
358 t->reinitialize(); |
357 return true; |
359 assert(t->empty(), "invariant"); |
358 } |
360 t->release(); // publish |
359 t->reinitialize(); |
361 } |
360 assert(t->empty(), "invariant"); |
|
361 assert(!t->retired(), "invariant"); |
|
362 t->release(); // publish |
362 return true; |
363 return true; |
363 } |
364 } |
364 |
365 |
365 #ifdef ASSERT |
366 #ifdef ASSERT |
366 template <typename T> |
367 template <typename T> |