8230398: Remove NULL checks before FREE_C_HEAP_ARRAY
Reviewed-by: dholmes, kbarrett, tschatzl
This commit is contained in:
parent
eafb888c18
commit
4b6f9ed07f
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2001, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright (c) 2012, 2018 SAP SE. All rights reserved.
|
* Copyright (c) 2012, 2018 SAP SE. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
@ -685,7 +685,7 @@ static char* get_user_name_slow(int vmid, TRAPS) {
|
|||||||
if (statbuf.st_ctime > oldest_ctime) {
|
if (statbuf.st_ctime > oldest_ctime) {
|
||||||
char* user = strchr(dentry->d_name, '_') + 1;
|
char* user = strchr(dentry->d_name, '_') + 1;
|
||||||
|
|
||||||
if (oldest_user != NULL) FREE_C_HEAP_ARRAY(char, oldest_user);
|
FREE_C_HEAP_ARRAY(char, oldest_user);
|
||||||
oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal);
|
oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal);
|
||||||
|
|
||||||
strcpy(oldest_user, user);
|
strcpy(oldest_user, user);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2001, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -591,7 +591,7 @@ static char* get_user_name_slow(int vmid, TRAPS) {
|
|||||||
if (statbuf.st_ctime > oldest_ctime) {
|
if (statbuf.st_ctime > oldest_ctime) {
|
||||||
char* user = strchr(dentry->d_name, '_') + 1;
|
char* user = strchr(dentry->d_name, '_') + 1;
|
||||||
|
|
||||||
if (oldest_user != NULL) FREE_C_HEAP_ARRAY(char, oldest_user);
|
FREE_C_HEAP_ARRAY(char, oldest_user);
|
||||||
oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal);
|
oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal);
|
||||||
|
|
||||||
strcpy(oldest_user, user);
|
strcpy(oldest_user, user);
|
||||||
|
@ -629,7 +629,7 @@ static char* get_user_name_slow(int vmid, int nspid, TRAPS) {
|
|||||||
if (statbuf.st_ctime > oldest_ctime) {
|
if (statbuf.st_ctime > oldest_ctime) {
|
||||||
char* user = strchr(dentry->d_name, '_') + 1;
|
char* user = strchr(dentry->d_name, '_') + 1;
|
||||||
|
|
||||||
if (oldest_user != NULL) FREE_C_HEAP_ARRAY(char, oldest_user);
|
FREE_C_HEAP_ARRAY(char, oldest_user);
|
||||||
oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal);
|
oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal);
|
||||||
|
|
||||||
strcpy(oldest_user, user);
|
strcpy(oldest_user, user);
|
||||||
|
@ -326,9 +326,7 @@ bool CPUPerformanceInterface::CPUPerformance::initialize() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
CPUPerformanceInterface::CPUPerformance::~CPUPerformance() {
|
CPUPerformanceInterface::CPUPerformance::~CPUPerformance() {
|
||||||
if (_counters.jvmTicks != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(char, _counters.jvmTicks);
|
FREE_C_HEAP_ARRAY(char, _counters.jvmTicks);
|
||||||
}
|
|
||||||
if (_counters.kstat_ctrl != NULL) {
|
if (_counters.kstat_ctrl != NULL) {
|
||||||
kstat_close(_counters.kstat_ctrl);
|
kstat_close(_counters.kstat_ctrl);
|
||||||
}
|
}
|
||||||
|
@ -454,9 +454,7 @@ static bool assign_distribution(processorid_t* id_array,
|
|||||||
board = 0;
|
board = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (available_id != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(bool, available_id);
|
FREE_C_HEAP_ARRAY(bool, available_id);
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -493,9 +491,7 @@ bool os::distribute_processes(uint length, uint* distribution) {
|
|||||||
result = false;
|
result = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (id_array != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(processorid_t, id_array);
|
FREE_C_HEAP_ARRAY(processorid_t, id_array);
|
||||||
}
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2001, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -591,7 +591,7 @@ static char* get_user_name_slow(int vmid, TRAPS) {
|
|||||||
if (statbuf.st_ctime > oldest_ctime) {
|
if (statbuf.st_ctime > oldest_ctime) {
|
||||||
char* user = strchr(dentry->d_name, '_') + 1;
|
char* user = strchr(dentry->d_name, '_') + 1;
|
||||||
|
|
||||||
if (oldest_user != NULL) FREE_C_HEAP_ARRAY(char, oldest_user);
|
FREE_C_HEAP_ARRAY(char, oldest_user);
|
||||||
oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal);
|
oldest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal);
|
||||||
|
|
||||||
strcpy(oldest_user, user);
|
strcpy(oldest_user, user);
|
||||||
|
@ -225,11 +225,9 @@ static int allocate_counters(ProcessQueryP process_query, size_t nofCounters) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void deallocate_counters(MultiCounterQueryP query) {
|
static void deallocate_counters(MultiCounterQueryP query) {
|
||||||
if (query->counters != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(char, query->counters);
|
FREE_C_HEAP_ARRAY(char, query->counters);
|
||||||
query->counters = NULL;
|
query->counters = NULL;
|
||||||
query->noOfCounters = 0;
|
query->noOfCounters = 0;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static OSReturn add_counter(UpdateQueryP query, HCOUNTER* counter, const char* path, bool first_sample_on_init) {
|
static OSReturn add_counter(UpdateQueryP query, HCOUNTER* counter, const char* path, bool first_sample_on_init) {
|
||||||
@ -659,14 +657,10 @@ static const char* pdh_process_image_name() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void deallocate_pdh_constants() {
|
static void deallocate_pdh_constants() {
|
||||||
if (process_image_name != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(char, process_image_name);
|
FREE_C_HEAP_ARRAY(char, process_image_name);
|
||||||
process_image_name = NULL;
|
process_image_name = NULL;
|
||||||
}
|
|
||||||
if (pdh_IDProcess_counter_fmt != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(char, pdh_IDProcess_counter_fmt);
|
FREE_C_HEAP_ARRAY(char, pdh_IDProcess_counter_fmt);
|
||||||
pdh_IDProcess_counter_fmt = NULL;
|
pdh_IDProcess_counter_fmt = NULL;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int allocate_pdh_constants() {
|
static int allocate_pdh_constants() {
|
||||||
@ -1352,16 +1346,10 @@ bool CPUInformationInterface::initialize() {
|
|||||||
|
|
||||||
CPUInformationInterface::~CPUInformationInterface() {
|
CPUInformationInterface::~CPUInformationInterface() {
|
||||||
if (_cpu_info != NULL) {
|
if (_cpu_info != NULL) {
|
||||||
const char* cpu_name = _cpu_info->cpu_name();
|
FREE_C_HEAP_ARRAY(char, _cpu_info->cpu_name());
|
||||||
if (cpu_name != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(char, cpu_name);
|
|
||||||
_cpu_info->set_cpu_name(NULL);
|
_cpu_info->set_cpu_name(NULL);
|
||||||
}
|
FREE_C_HEAP_ARRAY(char, _cpu_info->cpu_description());
|
||||||
const char* cpu_desc = _cpu_info->cpu_description();
|
|
||||||
if (cpu_desc != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(char, cpu_desc);
|
|
||||||
_cpu_info->set_cpu_description(NULL);
|
_cpu_info->set_cpu_description(NULL);
|
||||||
}
|
|
||||||
delete _cpu_info;
|
delete _cpu_info;
|
||||||
_cpu_info = NULL;
|
_cpu_info = NULL;
|
||||||
}
|
}
|
||||||
|
@ -2727,10 +2727,8 @@ class NUMANodeListHolder {
|
|||||||
int _numa_used_node_count;
|
int _numa_used_node_count;
|
||||||
|
|
||||||
void free_node_list() {
|
void free_node_list() {
|
||||||
if (_numa_used_node_list != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(int, _numa_used_node_list);
|
FREE_C_HEAP_ARRAY(int, _numa_used_node_list);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
NUMANodeListHolder() {
|
NUMANodeListHolder() {
|
||||||
|
@ -394,7 +394,7 @@ static char* get_user_name_slow(int vmid) {
|
|||||||
if (statbuf.st_ctime > latest_ctime) {
|
if (statbuf.st_ctime > latest_ctime) {
|
||||||
char* user = strchr(dentry->d_name, '_') + 1;
|
char* user = strchr(dentry->d_name, '_') + 1;
|
||||||
|
|
||||||
if (latest_user != NULL) FREE_C_HEAP_ARRAY(char, latest_user);
|
FREE_C_HEAP_ARRAY(char, latest_user);
|
||||||
latest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal);
|
latest_user = NEW_C_HEAP_ARRAY(char, strlen(user)+1, mtInternal);
|
||||||
|
|
||||||
strcpy(latest_user, user);
|
strcpy(latest_user, user);
|
||||||
|
@ -212,12 +212,8 @@ AOTLib::~AOTLib() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
AOTCodeHeap::~AOTCodeHeap() {
|
AOTCodeHeap::~AOTCodeHeap() {
|
||||||
if (_classes != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(AOTClass, _classes);
|
FREE_C_HEAP_ARRAY(AOTClass, _classes);
|
||||||
}
|
|
||||||
if (_code_to_aot != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(CodeToAMethod, _code_to_aot);
|
FREE_C_HEAP_ARRAY(CodeToAMethod, _code_to_aot);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AOTLib::AOTLib(void* handle, const char* name, int dso_id) : _valid(true), _dl_handle(handle), _dso_id(dso_id) {
|
AOTLib::AOTLib(void* handle, const char* name, int dso_id) : _valid(true), _dl_handle(handle), _dso_id(dso_id) {
|
||||||
|
@ -383,10 +383,8 @@ ClassPathImageEntry::~ClassPathImageEntry() {
|
|||||||
assert(_singleton == this, "must be");
|
assert(_singleton == this, "must be");
|
||||||
DEBUG_ONLY(_singleton = NULL);
|
DEBUG_ONLY(_singleton = NULL);
|
||||||
|
|
||||||
if (_name != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(const char, _name);
|
FREE_C_HEAP_ARRAY(const char, _name);
|
||||||
_name = NULL;
|
|
||||||
}
|
|
||||||
if (_jimage != NULL) {
|
if (_jimage != NULL) {
|
||||||
(*JImageClose)(_jimage);
|
(*JImageClose)(_jimage);
|
||||||
_jimage = NULL;
|
_jimage = NULL;
|
||||||
|
@ -1059,10 +1059,8 @@ void SystemDictionaryShared::remove_dumptime_info(InstanceKlass* k) {
|
|||||||
FREE_C_HEAP_ARRAY(DTConstraint, p->_verifier_constraints);
|
FREE_C_HEAP_ARRAY(DTConstraint, p->_verifier_constraints);
|
||||||
p->_verifier_constraints = NULL;
|
p->_verifier_constraints = NULL;
|
||||||
}
|
}
|
||||||
if (p->_verifier_constraint_flags != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(char, p->_verifier_constraint_flags);
|
FREE_C_HEAP_ARRAY(char, p->_verifier_constraint_flags);
|
||||||
p->_verifier_constraint_flags = NULL;
|
p->_verifier_constraint_flags = NULL;
|
||||||
}
|
|
||||||
_dumptime_table->remove(k);
|
_dumptime_table->remove(k);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,10 +155,8 @@ RuntimeBlob::RuntimeBlob(
|
|||||||
}
|
}
|
||||||
|
|
||||||
void CodeBlob::flush() {
|
void CodeBlob::flush() {
|
||||||
if (_oop_maps) {
|
|
||||||
FREE_C_HEAP_ARRAY(unsigned char, _oop_maps);
|
FREE_C_HEAP_ARRAY(unsigned char, _oop_maps);
|
||||||
_oop_maps = NULL;
|
_oop_maps = NULL;
|
||||||
}
|
|
||||||
_strings.free();
|
_strings.free();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -74,5 +74,5 @@ GSpaceCounters::GSpaceCounters(const char* name, int ordinal, size_t max_size,
|
|||||||
}
|
}
|
||||||
|
|
||||||
GSpaceCounters::~GSpaceCounters() {
|
GSpaceCounters::~GSpaceCounters() {
|
||||||
if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space);
|
FREE_C_HEAP_ARRAY(char, _name_space);
|
||||||
}
|
}
|
||||||
|
@ -72,10 +72,8 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
~EpsilonSpaceCounters() {
|
~EpsilonSpaceCounters() {
|
||||||
if (_name_space != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(char, _name_space);
|
FREE_C_HEAP_ARRAY(char, _name_space);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
inline void update_all(size_t capacity, size_t used) {
|
inline void update_all(size_t capacity, size_t used) {
|
||||||
_capacity->set_value(capacity);
|
_capacity->set_value(capacity);
|
||||||
|
@ -72,9 +72,7 @@ G1CollectionSet::G1CollectionSet(G1CollectedHeap* g1h, G1Policy* policy) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
G1CollectionSet::~G1CollectionSet() {
|
G1CollectionSet::~G1CollectionSet() {
|
||||||
if (_collection_set_regions != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(uint, _collection_set_regions);
|
FREE_C_HEAP_ARRAY(uint, _collection_set_regions);
|
||||||
}
|
|
||||||
free_optional_regions();
|
free_optional_regions();
|
||||||
clear_candidates();
|
clear_candidates();
|
||||||
}
|
}
|
||||||
|
@ -107,9 +107,7 @@ G1RemSetSummary::G1RemSetSummary(G1RemSet* rem_set) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
G1RemSetSummary::~G1RemSetSummary() {
|
G1RemSetSummary::~G1RemSetSummary() {
|
||||||
if (_rs_threads_vtimes) {
|
|
||||||
FREE_C_HEAP_ARRAY(double, _rs_threads_vtimes);
|
FREE_C_HEAP_ARRAY(double, _rs_threads_vtimes);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void G1RemSetSummary::set(G1RemSetSummary* other) {
|
void G1RemSetSummary::set(G1RemSetSummary* other) {
|
||||||
|
@ -531,9 +531,7 @@ HeapRegionClaimer::HeapRegionClaimer(uint n_workers) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
HeapRegionClaimer::~HeapRegionClaimer() {
|
HeapRegionClaimer::~HeapRegionClaimer() {
|
||||||
if (_claims != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(uint, _claims);
|
FREE_C_HEAP_ARRAY(uint, _claims);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint HeapRegionClaimer::offset_for_worker(uint worker_id) const {
|
uint HeapRegionClaimer::offset_for_worker(uint worker_id) const {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2001, 2018, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2001, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -104,14 +104,8 @@ RSHashTable::RSHashTable(size_t capacity) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
RSHashTable::~RSHashTable() {
|
RSHashTable::~RSHashTable() {
|
||||||
if (_entries != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(SparsePRTEntry, _entries);
|
FREE_C_HEAP_ARRAY(SparsePRTEntry, _entries);
|
||||||
_entries = NULL;
|
|
||||||
}
|
|
||||||
if (_buckets != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(int, _buckets);
|
FREE_C_HEAP_ARRAY(int, _buckets);
|
||||||
_buckets = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RSHashTable::clear() {
|
void RSHashTable::clear() {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -66,5 +66,5 @@ SpaceCounters::SpaceCounters(const char* name, int ordinal, size_t max_size,
|
|||||||
}
|
}
|
||||||
|
|
||||||
SpaceCounters::~SpaceCounters() {
|
SpaceCounters::~SpaceCounters() {
|
||||||
if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space);
|
FREE_C_HEAP_ARRAY(char, _name_space);
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -66,7 +66,7 @@ CSpaceCounters::CSpaceCounters(const char* name, int ordinal, size_t max_size,
|
|||||||
}
|
}
|
||||||
|
|
||||||
CSpaceCounters::~CSpaceCounters() {
|
CSpaceCounters::~CSpaceCounters() {
|
||||||
if (_name_space != NULL) FREE_C_HEAP_ARRAY(char, _name_space);
|
FREE_C_HEAP_ARRAY(char, _name_space);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CSpaceCounters::update_capacity() {
|
void CSpaceCounters::update_capacity() {
|
||||||
|
@ -624,26 +624,11 @@ CardTableRS::CardTableRS(MemRegion whole_heap, bool scanned_concurrently) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
CardTableRS::~CardTableRS() {
|
CardTableRS::~CardTableRS() {
|
||||||
if (_last_cur_val_in_gen) {
|
|
||||||
FREE_C_HEAP_ARRAY(CardValue, _last_cur_val_in_gen);
|
FREE_C_HEAP_ARRAY(CardValue, _last_cur_val_in_gen);
|
||||||
_last_cur_val_in_gen = NULL;
|
|
||||||
}
|
|
||||||
if (_lowest_non_clean) {
|
|
||||||
FREE_C_HEAP_ARRAY(CardArr, _lowest_non_clean);
|
FREE_C_HEAP_ARRAY(CardArr, _lowest_non_clean);
|
||||||
_lowest_non_clean = NULL;
|
|
||||||
}
|
|
||||||
if (_lowest_non_clean_chunk_size) {
|
|
||||||
FREE_C_HEAP_ARRAY(size_t, _lowest_non_clean_chunk_size);
|
FREE_C_HEAP_ARRAY(size_t, _lowest_non_clean_chunk_size);
|
||||||
_lowest_non_clean_chunk_size = NULL;
|
|
||||||
}
|
|
||||||
if (_lowest_non_clean_base_chunk_index) {
|
|
||||||
FREE_C_HEAP_ARRAY(uintptr_t, _lowest_non_clean_base_chunk_index);
|
FREE_C_HEAP_ARRAY(uintptr_t, _lowest_non_clean_base_chunk_index);
|
||||||
_lowest_non_clean_base_chunk_index = NULL;
|
|
||||||
}
|
|
||||||
if (_last_LNC_resizing_collection) {
|
|
||||||
FREE_C_HEAP_ARRAY(int, _last_LNC_resizing_collection);
|
FREE_C_HEAP_ARRAY(int, _last_LNC_resizing_collection);
|
||||||
_last_LNC_resizing_collection = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void CardTableRS::initialize() {
|
void CardTableRS::initialize() {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -63,9 +63,7 @@ CollectorCounters::CollectorCounters(const char* name, int ordinal) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
CollectorCounters::~CollectorCounters() {
|
CollectorCounters::~CollectorCounters() {
|
||||||
if (_name_space != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(char, _name_space);
|
FREE_C_HEAP_ARRAY(char, _name_space);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TraceCollectorStats::TraceCollectorStats(CollectorCounters* c) :
|
TraceCollectorStats::TraceCollectorStats(CollectorCounters* c) :
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2002, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2002, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -80,9 +80,7 @@ GenerationCounters::GenerationCounters(const char* name,
|
|||||||
}
|
}
|
||||||
|
|
||||||
GenerationCounters::~GenerationCounters() {
|
GenerationCounters::~GenerationCounters() {
|
||||||
if (_name_space != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(char, _name_space);
|
FREE_C_HEAP_ARRAY(char, _name_space);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void GenerationCounters::update_all() {
|
void GenerationCounters::update_all() {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -67,9 +67,7 @@ HSpaceCounters::HSpaceCounters(const char* name_space,
|
|||||||
}
|
}
|
||||||
|
|
||||||
HSpaceCounters::~HSpaceCounters() {
|
HSpaceCounters::~HSpaceCounters() {
|
||||||
if (_name_space != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(char, _name_space);
|
FREE_C_HEAP_ARRAY(char, _name_space);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void HSpaceCounters::update_capacity(size_t v) {
|
void HSpaceCounters::update_capacity(size_t v) {
|
||||||
|
@ -454,7 +454,7 @@ void SubTasksDone::all_tasks_completed(uint n_threads) {
|
|||||||
|
|
||||||
|
|
||||||
SubTasksDone::~SubTasksDone() {
|
SubTasksDone::~SubTasksDone() {
|
||||||
if (_tasks != NULL) FREE_C_HEAP_ARRAY(uint, _tasks);
|
FREE_C_HEAP_ARRAY(uint, _tasks);
|
||||||
}
|
}
|
||||||
|
|
||||||
// *** SequentialSubTasksDone
|
// *** SequentialSubTasksDone
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -36,9 +36,7 @@ inline ZArray<T>::ZArray() :
|
|||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
inline ZArray<T>::~ZArray() {
|
inline ZArray<T>::~ZArray() {
|
||||||
if (_array != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(T, _array);
|
FREE_C_HEAP_ARRAY(T, _array);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
@ -272,9 +272,7 @@ JfrStackTraceRepository::StackTrace::StackTrace(traceid id, const JfrStackTrace&
|
|||||||
}
|
}
|
||||||
|
|
||||||
JfrStackTraceRepository::StackTrace::~StackTrace() {
|
JfrStackTraceRepository::StackTrace::~StackTrace() {
|
||||||
if (_frames != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(JfrStackFrame, _frames);
|
FREE_C_HEAP_ARRAY(JfrStackFrame, _frames);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool JfrStackTraceRepository::StackTrace::equals(const JfrStackTrace& rhs) const {
|
bool JfrStackTraceRepository::StackTrace::equals(const JfrStackTrace& rhs) const {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2012, 2018, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -117,9 +117,7 @@ void JfrThreadLocal::release(JfrThreadLocal* tl, Thread* t) {
|
|||||||
assert(t->is_Java_thread(), "invariant");
|
assert(t->is_Java_thread(), "invariant");
|
||||||
JfrJavaSupport::destroy_global_jni_handle(tl->java_event_writer());
|
JfrJavaSupport::destroy_global_jni_handle(tl->java_event_writer());
|
||||||
}
|
}
|
||||||
if (tl->_stackframes != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(JfrStackFrame, tl->_stackframes);
|
FREE_C_HEAP_ARRAY(JfrStackFrame, tl->_stackframes);
|
||||||
}
|
|
||||||
tl->_dead = true;
|
tl->_dead = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -92,11 +92,9 @@ class JfrBasicHashtable : public CHeapObj<mtTracing> {
|
|||||||
--_number_of_entries;
|
--_number_of_entries;
|
||||||
}
|
}
|
||||||
void free_buckets() {
|
void free_buckets() {
|
||||||
if (NULL != _buckets) {
|
|
||||||
FREE_C_HEAP_ARRAY(Bucket, _buckets);
|
FREE_C_HEAP_ARRAY(Bucket, _buckets);
|
||||||
_buckets = NULL;
|
_buckets = NULL;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
TableEntry* bucket(size_t i) { return _buckets[i].get_entry();}
|
TableEntry* bucket(size_t i) { return _buckets[i].get_entry();}
|
||||||
TableEntry** bucket_addr(size_t i) { return _buckets[i].entry_addr(); }
|
TableEntry** bucket_addr(size_t i) { return _buckets[i].entry_addr(); }
|
||||||
uintptr_t table_size() const { return _table_size; }
|
uintptr_t table_size() const { return _table_size; }
|
||||||
|
@ -510,9 +510,7 @@ void CodeInstaller::initialize_dependencies(JVMCIObject compiled_code, OopRecord
|
|||||||
|
|
||||||
#if INCLUDE_AOT
|
#if INCLUDE_AOT
|
||||||
RelocBuffer::~RelocBuffer() {
|
RelocBuffer::~RelocBuffer() {
|
||||||
if (_buffer != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(char, _buffer);
|
FREE_C_HEAP_ARRAY(char, _buffer);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
address RelocBuffer::begin() const {
|
address RelocBuffer::begin() const {
|
||||||
|
@ -64,6 +64,7 @@ char* ReallocateHeap(char *old,
|
|||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// handles NULL pointers
|
||||||
void FreeHeap(void* p) {
|
void FreeHeap(void* p) {
|
||||||
os::free(p);
|
os::free(p);
|
||||||
}
|
}
|
||||||
|
@ -184,6 +184,7 @@ char* ReallocateHeap(char *old,
|
|||||||
MEMFLAGS flag,
|
MEMFLAGS flag,
|
||||||
AllocFailType alloc_failmode = AllocFailStrategy::EXIT_OOM);
|
AllocFailType alloc_failmode = AllocFailStrategy::EXIT_OOM);
|
||||||
|
|
||||||
|
// handles NULL pointers
|
||||||
void FreeHeap(void* p);
|
void FreeHeap(void* p);
|
||||||
|
|
||||||
template <MEMFLAGS F> class CHeapObj ALLOCATION_SUPER_CLASS_SPEC {
|
template <MEMFLAGS F> class CHeapObj ALLOCATION_SUPER_CLASS_SPEC {
|
||||||
|
@ -2546,7 +2546,7 @@ void InstanceKlass::release_C_heap_structures() {
|
|||||||
// unreference array name derived from this class name (arrays of an unloaded
|
// unreference array name derived from this class name (arrays of an unloaded
|
||||||
// class can't be referenced anymore).
|
// class can't be referenced anymore).
|
||||||
if (_array_name != NULL) _array_name->decrement_refcount();
|
if (_array_name != NULL) _array_name->decrement_refcount();
|
||||||
if (_source_debug_extension != NULL) FREE_C_HEAP_ARRAY(char, _source_debug_extension);
|
FREE_C_HEAP_ARRAY(char, _source_debug_extension);
|
||||||
}
|
}
|
||||||
|
|
||||||
void InstanceKlass::set_source_debug_extension(const char* array, int length) {
|
void InstanceKlass::set_source_debug_extension(const char* array, int length) {
|
||||||
|
@ -875,9 +875,7 @@ UNSAFE_ENTRY(jclass, Unsafe_DefineAnonymousClass0(JNIEnv *env, jobject unsafe, j
|
|||||||
}
|
}
|
||||||
|
|
||||||
// try/finally clause:
|
// try/finally clause:
|
||||||
if (temp_alloc != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(u1, temp_alloc);
|
FREE_C_HEAP_ARRAY(u1, temp_alloc);
|
||||||
}
|
|
||||||
|
|
||||||
// The anonymous class loader data has been artificially been kept alive to
|
// The anonymous class loader data has been artificially been kept alive to
|
||||||
// this point. The mirror and any instances of this class have to keep
|
// this point. The mirror and any instances of this class have to keep
|
||||||
|
@ -941,10 +941,8 @@ static bool append_to_string_flag(JVMFlag* flag, const char* new_value, JVMFlag:
|
|||||||
(void) JVMFlag::ccstrAtPut(flag, &value, origin);
|
(void) JVMFlag::ccstrAtPut(flag, &value, origin);
|
||||||
// JVMFlag always returns a pointer that needs freeing.
|
// JVMFlag always returns a pointer that needs freeing.
|
||||||
FREE_C_HEAP_ARRAY(char, value);
|
FREE_C_HEAP_ARRAY(char, value);
|
||||||
if (free_this_too != NULL) {
|
|
||||||
// JVMFlag made its own copy, so I must delete my own temp. buffer.
|
// JVMFlag made its own copy, so I must delete my own temp. buffer.
|
||||||
FREE_C_HEAP_ARRAY(char, free_this_too);
|
FREE_C_HEAP_ARRAY(char, free_this_too);
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -796,7 +796,7 @@ void* os::realloc(void *memblock, size_t size, MEMFLAGS memflags, const NativeCa
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// handles NULL pointers
|
||||||
void os::free(void *memblock) {
|
void os::free(void *memblock) {
|
||||||
NOT_PRODUCT(inc_stat_counter(&num_frees, 1));
|
NOT_PRODUCT(inc_stat_counter(&num_frees, 1));
|
||||||
#ifdef ASSERT
|
#ifdef ASSERT
|
||||||
|
@ -740,6 +740,7 @@ class os: AllStatic {
|
|||||||
static void* realloc (void *memblock, size_t size, MEMFLAGS flag, const NativeCallStack& stack);
|
static void* realloc (void *memblock, size_t size, MEMFLAGS flag, const NativeCallStack& stack);
|
||||||
static void* realloc (void *memblock, size_t size, MEMFLAGS flag);
|
static void* realloc (void *memblock, size_t size, MEMFLAGS flag);
|
||||||
|
|
||||||
|
// handles NULL pointers
|
||||||
static void free (void *memblock);
|
static void free (void *memblock);
|
||||||
static char* strdup(const char *, MEMFLAGS flags = mtInternal); // Like strdup
|
static char* strdup(const char *, MEMFLAGS flags = mtInternal); // Like strdup
|
||||||
// Like strdup, but exit VM when strdup() returns NULL
|
// Like strdup, but exit VM when strdup() returns NULL
|
||||||
|
@ -41,13 +41,9 @@ class EnvironmentVariable : public CHeapObj<mtInternal> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
~EnvironmentVariable() {
|
~EnvironmentVariable() {
|
||||||
if (_key != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(char, _key);
|
FREE_C_HEAP_ARRAY(char, _key);
|
||||||
}
|
|
||||||
if (_value != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(char, _value);
|
FREE_C_HEAP_ARRAY(char, _value);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
EnvironmentVariable(char* key, char* value) {
|
EnvironmentVariable(char* key, char* value) {
|
||||||
_key = key;
|
_key = key;
|
||||||
@ -181,16 +177,10 @@ class SystemProcess : public CHeapObj<mtInternal> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
virtual ~SystemProcess(void) {
|
virtual ~SystemProcess(void) {
|
||||||
if (_name != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(char, _name);
|
FREE_C_HEAP_ARRAY(char, _name);
|
||||||
}
|
|
||||||
if (_path != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(char, _path);
|
FREE_C_HEAP_ARRAY(char, _path);
|
||||||
}
|
|
||||||
if (_command_line != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(char, _command_line);
|
FREE_C_HEAP_ARRAY(char, _command_line);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class NetworkInterface : public ResourceObj {
|
class NetworkInterface : public ResourceObj {
|
||||||
|
@ -113,9 +113,7 @@ PerfData::PerfData(CounterNS ns, const char* name, Units u, Variability v)
|
|||||||
}
|
}
|
||||||
|
|
||||||
PerfData::~PerfData() {
|
PerfData::~PerfData() {
|
||||||
if (_name != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(char, _name);
|
FREE_C_HEAP_ARRAY(char, _name);
|
||||||
}
|
|
||||||
if (is_on_c_heap()) {
|
if (is_on_c_heap()) {
|
||||||
FREE_C_HEAP_ARRAY(PerfDataEntry, _pdep);
|
FREE_C_HEAP_ARRAY(PerfDataEntry, _pdep);
|
||||||
}
|
}
|
||||||
|
@ -2809,7 +2809,7 @@ void AdapterHandlerEntry::relocate(address new_base) {
|
|||||||
void AdapterHandlerEntry::deallocate() {
|
void AdapterHandlerEntry::deallocate() {
|
||||||
delete _fingerprint;
|
delete _fingerprint;
|
||||||
#ifdef ASSERT
|
#ifdef ASSERT
|
||||||
if (_saved_code) FREE_C_HEAP_ARRAY(unsigned char, _saved_code);
|
FREE_C_HEAP_ARRAY(unsigned char, _saved_code);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1328,10 +1328,7 @@ NamedThread::NamedThread() :
|
|||||||
{}
|
{}
|
||||||
|
|
||||||
NamedThread::~NamedThread() {
|
NamedThread::~NamedThread() {
|
||||||
if (_name != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(char, _name);
|
FREE_C_HEAP_ARRAY(char, _name);
|
||||||
_name = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void NamedThread::set_name(const char* format, ...) {
|
void NamedThread::set_name(const char* format, ...) {
|
||||||
@ -3235,7 +3232,7 @@ WordSize JavaThread::popframe_preserved_args_size_in_words() {
|
|||||||
|
|
||||||
void JavaThread::popframe_free_preserved_args() {
|
void JavaThread::popframe_free_preserved_args() {
|
||||||
assert(_popframe_preserved_args != NULL, "should not free PopFrame preserved arguments twice");
|
assert(_popframe_preserved_args != NULL, "should not free PopFrame preserved arguments twice");
|
||||||
FREE_C_HEAP_ARRAY(char, (char*) _popframe_preserved_args);
|
FREE_C_HEAP_ARRAY(char, (char*)_popframe_preserved_args);
|
||||||
_popframe_preserved_args = NULL;
|
_popframe_preserved_args = NULL;
|
||||||
_popframe_preserved_args_size = 0;
|
_popframe_preserved_args_size = 0;
|
||||||
}
|
}
|
||||||
|
@ -36,10 +36,8 @@ StringArrayArgument::StringArrayArgument() {
|
|||||||
|
|
||||||
StringArrayArgument::~StringArrayArgument() {
|
StringArrayArgument::~StringArrayArgument() {
|
||||||
for (int i=0; i<_array->length(); i++) {
|
for (int i=0; i<_array->length(); i++) {
|
||||||
if(_array->at(i) != NULL) { // Safety check
|
|
||||||
FREE_C_HEAP_ARRAY(char, _array->at(i));
|
FREE_C_HEAP_ARRAY(char, _array->at(i));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
delete _array;
|
delete _array;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -197,10 +195,8 @@ template <> void DCmdArgument<char*>::init_value(TRAPS) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <> void DCmdArgument<char*>::destroy_value() {
|
template <> void DCmdArgument<char*>::destroy_value() {
|
||||||
if (_value != NULL) {
|
|
||||||
FREE_C_HEAP_ARRAY(char, _value);
|
FREE_C_HEAP_ARRAY(char, _value);
|
||||||
set_value(NULL);
|
set_value(NULL);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <> void DCmdArgument<NanoTimeArgument>::parse_value(const char* str,
|
template <> void DCmdArgument<NanoTimeArgument>::parse_value(const char* str,
|
||||||
|
@ -101,10 +101,8 @@ template <class T, MEMFLAGS F> HashtableEntry<T, F>* Hashtable<T, F>::allocate_n
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <MEMFLAGS F> void BasicHashtable<F>::free_buckets() {
|
template <MEMFLAGS F> void BasicHashtable<F>::free_buckets() {
|
||||||
if (NULL != _buckets) {
|
|
||||||
FREE_C_HEAP_ARRAY(HashtableBucket, _buckets);
|
FREE_C_HEAP_ARRAY(HashtableBucket, _buckets);
|
||||||
_buckets = NULL;
|
_buckets = NULL;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// For oops and Strings the size of the literal is interesting. For other types, nobody cares.
|
// For oops and Strings the size of the literal is interesting. For other types, nobody cares.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user