freeze.c 790 B

12345678910111213141516171819202122232425262728293031323334
  1. #include "__virtualmath.h"
  2. void gc_freezeHashTable(HashTable *ht, bool is_lock){
  3. if (ht == NULL)
  4. return;
  5. if (is_lock)
  6. gc_addTmpLink(&ht->gc_status);
  7. else
  8. gc_freeTmpLink(&ht->gc_status);
  9. gc_IterAlready(&ht->gc_status);
  10. }
  11. void gc_iterFreezeVarList(VarList *freeze, VarList *base, bool is_lock){
  12. for (PASS; freeze != NULL; freeze = freeze->next){
  13. if (!comparVarList(freeze, base))
  14. gc_freezeHashTable(freeze->hashtable, is_lock);
  15. }
  16. }
  17. /**
  18. * 冻结不可达的VarList的hashTable
  19. * @param inter
  20. * @param freeze
  21. * @param base
  22. * @param is_lock
  23. */
  24. void gc_freeze(Inter *inter, VarList *freeze, VarList *base, bool is_lock){
  25. #if START_GC
  26. gc_resetBase(inter);
  27. gc_iterFreezeVarList(freeze, base, is_lock);
  28. #endif
  29. }