資源簡介
安裝rabbitmq3.7.12版本對應的otp_src_21.2.tar.gz安裝
代碼片段和文件信息
/*
?*?%CopyrightBegin%
?*
?*?Copyright?Ericsson?AB?1996-2018.?All?Rights?Reserved.
?*
?*?Licensed?under?the?Apache?License?Version?2.0?(the?“License“);
?*?you?may?not?use?this?file?except?in?compliance?with?the?License.
?*?You?may?obtain?a?copy?of?the?License?at
?*
?*?????http://www.apache.org/licenses/LICENSE-2.0
?*
?*?Unless?required?by?applicable?law?or?agreed?to?in?writing?software
?*?distributed?under?the?License?is?distributed?on?an?“AS?IS“?BASIS
?*?WITHOUT?WARRANTIES?OR?CONDITIONS?OF?ANY?KIND?either?express?or?implied.
?*?See?the?License?for?the?specific?language?governing?permissions?and
?*?limitations?under?the?License.
?*
?*?%CopyrightEnd%
?*/
#ifdef?HAVE_CONFIG_H
#??include?“config.h“
#endif
#include?“sys.h“
#include?“erl_sys_driver.h“
#include?“erl_vm.h“
#include?“global.h“
#include?“hash.h“
#include?“atom.h“
#define?ATOM_SIZE??3000
IndexTable?erts_atom_table; /*?The?index?table?*/
static?erts_rwmtx_t?atom_table_lock;
#define?atom_read_lock() erts_rwmtx_rlock(&atom_table_lock)
#define?atom_read_unlock() erts_rwmtx_runlock(&atom_table_lock)
#define?atom_write_lock() erts_rwmtx_rwlock(&atom_table_lock)
#define?atom_write_unlock() erts_rwmtx_rwunlock(&atom_table_lock)
#if?0
#define?ERTS_ATOM_PUT_OPS_STAT
#endif
#ifdef?ERTS_ATOM_PUT_OPS_STAT
static?erts_atomic_t?atom_put_ops;
#endif
/*?Functions?for?allocating?space?for?the?ext?of?atoms.?We?do?not
?*?use?malloc?for?each?atom?to?prevent?excessive?memory?fragmentation
?*/
typedef?struct?_atom_text?{
????struct?_atom_text*?next;
????unsigned?char?text[ATOM_TEXT_SIZE];
}?AtomText;
static?AtomText*?text_list; /*?List?of?text?buffers?*/
static?byte?*atom_text_pos;
static?byte?*atom_text_end;
static?Uint?reserved_atom_space; /*?Total?amount?of?atom?text?space?*/
static?Uint?atom_space; /*?Amount?of?atom?text?space?used?*/
/*
?*?Print?info?about?atom?tables
?*/
void?atom_info(fmtfn_t?to?void?*to_arg)
{
????int?lock?=?!ERTS_IS_CRASH_DUMPING;
????if?(lock)
atom_read_lock();
????index_info(to?to_arg?&erts_atom_table);
#ifdef?ERTS_ATOM_PUT_OPS_STAT
????erts_print(to?to_arg?“atom_put_ops:?%ld\n“
???????erts_atomic_read_nob(&atom_put_ops));
#endif
????if?(lock)
atom_read_unlock();
}
/*
?*?Allocate?an?atom?text?segment.
?*/
static?void
more_atom_space(void)
{
????AtomText*?ptr;
????ptr?=?(AtomText*)?erts_alloc(ERTS_ALC_T_ATOM_TXT?sizeof(AtomText));
????ptr->next?=?text_list;
????text_list?=?ptr;
????atom_text_pos?=?ptr->text;
????atom_text_end?=?atom_text_pos?+?ATOM_TEXT_SIZE;
????reserved_atom_space?+=?sizeof(AtomText);
????VERBOSE(DEBUG_SYSTEM(“Allocated?%d?atom?space\n“ATOM_TEXT_SIZE));
}
/*
?*?Allocate?string?space?within?an?atom?text?segment.
?*/
static?byte*
atom_text_alloc(int?bytes)
{
????byte?*res;
????ASSERT(bytes?<=?MAX_ATOM_SZ_LIMIT);
????if?(atom_text_pos?+?bytes?>=?atom_text_end)?{
more_atom_space();
????}
????res?=?atom_text_pos;
????atom_text_pos?+=?bytes;
????atom_space????+=?bytes;
????return?res;
}
/*
?*?Calculate?atom?hash?value?(using?the?hash
評論
共有 條評論