diff options
Diffstat (limited to 'erts/emulator/beam/erl_fun.c')
| -rw-r--r-- | erts/emulator/beam/erl_fun.c | 46 | 
1 files changed, 22 insertions, 24 deletions
| diff --git a/erts/emulator/beam/erl_fun.c b/erts/emulator/beam/erl_fun.c index d18016c42e..9c866250bb 100644 --- a/erts/emulator/beam/erl_fun.c +++ b/erts/emulator/beam/erl_fun.c @@ -30,17 +30,16 @@  static Hash erts_fun_table; -#include "erl_smp.h"  #ifdef HIPE  # include "hipe_mode_switch.h"  #endif -static erts_smp_rwmtx_t erts_fun_table_lock; +static erts_rwmtx_t erts_fun_table_lock; -#define erts_fun_read_lock()	erts_smp_rwmtx_rlock(&erts_fun_table_lock) -#define erts_fun_read_unlock()	erts_smp_rwmtx_runlock(&erts_fun_table_lock) -#define erts_fun_write_lock()	erts_smp_rwmtx_rwlock(&erts_fun_table_lock) -#define erts_fun_write_unlock()	erts_smp_rwmtx_rwunlock(&erts_fun_table_lock) +#define erts_fun_read_lock()	erts_rwmtx_rlock(&erts_fun_table_lock) +#define erts_fun_read_unlock()	erts_rwmtx_runlock(&erts_fun_table_lock) +#define erts_fun_write_lock()	erts_rwmtx_rwlock(&erts_fun_table_lock) +#define erts_fun_write_unlock()	erts_rwmtx_rwunlock(&erts_fun_table_lock)  static HashValue fun_hash(ErlFunEntry* obj);  static int fun_cmp(ErlFunEntry* obj1, ErlFunEntry* obj2); @@ -59,11 +58,12 @@ void  erts_init_fun_table(void)  {      HashFunctions f; -    erts_smp_rwmtx_opt_t rwmtx_opt = ERTS_SMP_RWMTX_OPT_DEFAULT_INITER; -    rwmtx_opt.type = ERTS_SMP_RWMTX_TYPE_FREQUENT_READ; -    rwmtx_opt.lived = ERTS_SMP_RWMTX_LONG_LIVED; +    erts_rwmtx_opt_t rwmtx_opt = ERTS_RWMTX_OPT_DEFAULT_INITER; +    rwmtx_opt.type = ERTS_RWMTX_TYPE_FREQUENT_READ; +    rwmtx_opt.lived = ERTS_RWMTX_LONG_LIVED; -    erts_smp_rwmtx_init_opt(&erts_fun_table_lock, &rwmtx_opt, "fun_tab"); +    erts_rwmtx_init_opt(&erts_fun_table_lock, &rwmtx_opt, "fun_tab", NIL, +        ERTS_LOCK_FLAGS_PROPERTY_STATIC | ERTS_LOCK_FLAGS_CATEGORY_GENERIC);      f.hash = (H_FUN) fun_hash;      f.cmp  = (HCMP_FUN) fun_cmp; @@ -113,9 +113,9 @@ erts_put_fun_entry(Eterm mod, int uniq, int index)      fe = (ErlFunEntry *) hash_put(&erts_fun_table, (void*) &template);      sys_memset(fe->uniq, 0, sizeof(fe->uniq));      fe->index = 0; -    refc = erts_smp_refc_inctest(&fe->refc, 0); +    refc = erts_refc_inctest(&fe->refc, 0);      if (refc < 2) /* New or pending delete */ -	erts_smp_refc_inc(&fe->refc, 1); +	erts_refc_inc(&fe->refc, 1);      erts_fun_write_unlock();      return fe;  } @@ -137,9 +137,9 @@ erts_put_fun_entry2(Eterm mod, int old_uniq, int old_index,      sys_memcpy(fe->uniq, uniq, sizeof(fe->uniq));      fe->index = index;      fe->arity = arity; -    refc = erts_smp_refc_inctest(&fe->refc, 0); +    refc = erts_refc_inctest(&fe->refc, 0);      if (refc < 2) /* New or pending delete */ -	erts_smp_refc_inc(&fe->refc, 1); +	erts_refc_inc(&fe->refc, 1);      erts_fun_write_unlock();      return fe;  } @@ -164,9 +164,9 @@ erts_get_fun_entry(Eterm mod, int uniq, int index)      erts_fun_read_lock();      ret = (ErlFunEntry *) hash_get(&erts_fun_table, (void*) &template);      if (ret) { -	erts_aint_t refc = erts_smp_refc_inctest(&ret->refc, 1); +	erts_aint_t refc = erts_refc_inctest(&ret->refc, 1);  	if (refc < 2) /* Pending delete */ -	    erts_smp_refc_inc(&ret->refc, 1); +	    erts_refc_inc(&ret->refc, 1);      }      erts_fun_read_unlock();      return ret; @@ -182,13 +182,11 @@ void  erts_erase_fun_entry(ErlFunEntry* fe)  {      erts_fun_write_lock(); -#ifdef ERTS_SMP      /*       * We have to check refc again since someone might have looked up       * the fun entry and incremented refc after last check.       */ -    if (erts_smp_refc_dectest(&fe->refc, -1) <= 0) -#endif +    if (erts_refc_dectest(&fe->refc, -1) <= 0)      {  	if (fe->address != unloaded_fun)  	    erts_exit(ERTS_ERROR_EXIT, @@ -220,7 +218,7 @@ erts_fun_purge_prepare(BeamInstr* start, BeamInstr* end)  	    if (start <= addr && addr < end) {  		fe->pend_purge_address = addr; -		ERTS_SMP_WRITE_MEMORY_BARRIER; +		ERTS_THR_WRITE_MEMORY_BARRIER;  		fe->address = unloaded_fun;  #ifdef HIPE                  fe->pend_purge_native_address = fe->native_address; @@ -274,10 +272,10 @@ erts_fun_purge_complete(ErlFunEntry **funs, Uint no)  #ifdef HIPE          fe->pend_purge_native_address = NULL;  #endif -	if (erts_smp_refc_dectest(&fe->refc, 0) == 0) +	if (erts_refc_dectest(&fe->refc, 0) == 0)  	    erts_erase_fun_entry(fe);      } -    ERTS_SMP_WRITE_MEMORY_BARRIER; +    ERTS_THR_WRITE_MEMORY_BARRIER;  }  void @@ -306,7 +304,7 @@ erts_dump_fun_entries(fmtfn_t to, void *to_arg)  #ifdef HIPE  	    erts_print(to, to_arg, "Native_address: %p\n", fe->native_address);  #endif -	    erts_print(to, to_arg, "Refc: %ld\n", erts_smp_refc_read(&fe->refc, 1)); +	    erts_print(to, to_arg, "Refc: %ld\n", erts_refc_read(&fe->refc, 1));  	    b = b->next;  	}      } @@ -337,7 +335,7 @@ fun_alloc(ErlFunEntry* template)      obj->old_uniq = template->old_uniq;      obj->old_index = template->old_index;      obj->module = template->module; -    erts_smp_refc_init(&obj->refc, -1); +    erts_refc_init(&obj->refc, -1);      obj->address = unloaded_fun;      obj->pend_purge_address = NULL;  #ifdef HIPE | 
