Merge change 657 into donut

* changes:
  Fix a memory deallocation error that was crashing q2dm.
This commit is contained in:
Android (Google) Code Review
2009-04-28 13:16:19 -07:00
9 changed files with 36 additions and 36 deletions

View File

@@ -137,7 +137,7 @@ int main(int argc, char **argv)
continue; continue;
if (strcmp(psym->name, ".plt") == 0) if (strcmp(psym->name, ".plt") == 0)
continue; continue;
char *ksym = " "; const char *ksym = " ";
if (psym->region->flags & region_type::kIsKernelRegion) if (psym->region->flags & region_type::kIsKernelRegion)
ksym = "k"; ksym = "k";
printf("%s %s %s\n", ksym, psym->name, psym->region->path); printf("%s %s %s\n", ksym, psym->name, psym->region->path);

View File

@@ -137,7 +137,7 @@ int main(int argc, char **argv) {
double insn_per_sec = 0; double insn_per_sec = 0;
if (elapsed_secs != 0) if (elapsed_secs != 0)
insn_per_sec = num_dynamic_insn / elapsed_secs; insn_per_sec = num_dynamic_insn / elapsed_secs;
char *suffix = ""; const char *suffix = "";
if (insn_per_sec >= 1000000) { if (insn_per_sec >= 1000000) {
insn_per_sec /= 1000000.0; insn_per_sec /= 1000000.0;
suffix = "M"; suffix = "M";

View File

@@ -76,7 +76,7 @@ int main(int argc, char **argv) {
sum_time += pstate->cpu_time; sum_time += pstate->cpu_time;
double per = 100.0 * pstate->cpu_time / total_time; double per = 100.0 * pstate->cpu_time / total_time;
double sum_per = 100.0 * sum_time / total_time; double sum_per = 100.0 * sum_time / total_time;
char *print_flags = ""; const char *print_flags = "";
if ((pstate->flags & ProcessState::kCalledExec) == 0) if ((pstate->flags & ProcessState::kCalledExec) == 0)
print_flags = "T"; print_flags = "T";
if (pstate->name == NULL) if (pstate->name == NULL)

View File

@@ -118,7 +118,7 @@ int main(int argc, char **argv)
double per = 100.0 * sym->elapsed / total; double per = 100.0 * sym->elapsed / total;
double sum_per = 100.0 * sum / total; double sum_per = 100.0 * sum / total;
double secs = 1.0 * sym->elapsed / kMHz; double secs = 1.0 * sym->elapsed / kMHz;
char *ksym = " "; const char *ksym = " ";
if (sym->region->flags & region_type::kIsKernelRegion) if (sym->region->flags & region_type::kIsKernelRegion)
ksym = "k"; ksym = "k";
printf("%12.2f %11lld %6.2f %6.2f %s %s\n", printf("%12.2f %11lld %6.2f %6.2f %s %s\n",

View File

@@ -208,7 +208,7 @@ int main(int argc, char **argv)
if (pStack == NULL) { if (pStack == NULL) {
pStack = new CallStackType(event.pid, kNumStackFrames, trace); pStack = new CallStackType(event.pid, kNumStackFrames, trace);
stacks[event.pid] = pStack; stacks[event.pid] = pStack;
char *name = trace->GetProcessName(event.pid); const char *name = trace->GetProcessName(event.pid);
dmtrace->addThread(event.pid, name); dmtrace->addThread(event.pid, name);
} }
@@ -267,7 +267,6 @@ int main(int argc, char **argv)
} }
} }
dmtrace->close(); dmtrace->close();
delete dmtrace; delete dmtrace;
delete trace; delete trace;

View File

@@ -20,7 +20,7 @@ int main(int argc, char **argv) {
if (trace->ReadAddr(&time, &addr, &flags)) if (trace->ReadAddr(&time, &addr, &flags))
break; break;
char *op = "ld"; const char *op = "ld";
if (flags == 1) if (flags == 1)
op = "st"; op = "st";
printf("%lld 0x%08x %s\n", time, addr, op); printf("%lld 0x%08x %s\n", time, addr, op);

View File

@@ -131,7 +131,7 @@ BBReader::~BBReader()
delete decoder_; delete decoder_;
} }
void BBReader::Open(char *filename) void BBReader::Open(const char *filename)
{ {
// Initialize the class variables // Initialize the class variables
memset(&nextrec_, 0, sizeof(TimeRec)); memset(&nextrec_, 0, sizeof(TimeRec));
@@ -268,7 +268,7 @@ InsnReader::~InsnReader()
delete decoder_; delete decoder_;
} }
void InsnReader::Open(char *filename) void InsnReader::Open(const char *filename)
{ {
prev_time_ = 0; prev_time_ = 0;
time_diff_ = 0; time_diff_ = 0;
@@ -310,7 +310,7 @@ AddrReader::~AddrReader()
} }
// Returns true if there is an error opening the file // Returns true if there is an error opening the file
bool AddrReader::Open(char *filename, char *suffix) bool AddrReader::Open(const char *filename, const char *suffix)
{ {
struct stat stat_buf; struct stat stat_buf;
@@ -367,7 +367,7 @@ ExcReader::~ExcReader()
delete decoder_; delete decoder_;
} }
void ExcReader::Open(char *filename) void ExcReader::Open(const char *filename)
{ {
prev_time_ = 0; prev_time_ = 0;
prev_recnum_ = 0; prev_recnum_ = 0;
@@ -421,7 +421,7 @@ PidReader::~PidReader()
delete decoder_; delete decoder_;
} }
void PidReader::Open(char *filename) void PidReader::Open(const char *filename)
{ {
prev_time_ = 0; prev_time_ = 0;
@@ -561,7 +561,7 @@ MethodReader::~MethodReader()
delete decoder_; delete decoder_;
} }
bool MethodReader::Open(char *filename) bool MethodReader::Open(const char *filename)
{ {
struct stat stat_buf; struct stat stat_buf;
@@ -686,8 +686,8 @@ TraceReaderBase::~TraceReaderBase()
delete[] static_filename_; delete[] static_filename_;
} }
void TraceReaderBase::ReadTraceHeader(FILE *fstream, char *filename, void TraceReaderBase::ReadTraceHeader(FILE *fstream, const char *filename,
char *tracename, TraceHeader *header) const char *tracename, TraceHeader *header)
{ {
int rval = fread(header, sizeof(TraceHeader), 1, fstream); int rval = fread(header, sizeof(TraceHeader), 1, fstream);
if (rval != 1) { if (rval != 1) {
@@ -721,7 +721,7 @@ void TraceReaderBase::ReadTraceHeader(FILE *fstream, char *filename,
} }
void TraceReaderBase::Open(char *filename) void TraceReaderBase::Open(const char *filename)
{ {
char *fname; char *fname;
FILE *fstream; FILE *fstream;
@@ -840,7 +840,7 @@ static void CopyDexSymbolsToArray(DexFileList *dexfile,
} }
} }
void TraceReaderBase::ParseDexList(char *filename) void TraceReaderBase::ParseDexList(const char *filename)
{ {
struct stat stat_buf; struct stat stat_buf;
static const int kBufSize = 4096; static const int kBufSize = 4096;

View File

@@ -165,7 +165,7 @@ class TraceReader : public TraceReaderBase {
uint32_t flags; uint32_t flags;
int argc; int argc;
char **argv; char **argv;
char *name; const char *name;
int nregions; // num regions in use int nregions; // num regions in use
int max_regions; // max regions allocated int max_regions; // max regions allocated
region_type **regions; region_type **regions;
@@ -189,7 +189,7 @@ class TraceReader : public TraceReaderBase {
ProcessState *GetCurrentProcess() { return current_; } ProcessState *GetCurrentProcess() { return current_; }
ProcessState *GetProcesses(int *num_procs); ProcessState *GetProcesses(int *num_procs);
ProcessState *GetNextProcess(); ProcessState *GetNextProcess();
char *GetProcessName(int pid); const char *GetProcessName(int pid);
void SetRoot(const char *root) { root_ = root; } void SetRoot(const char *root) { root_ = root; }
void SetDemangle(bool demangle) { demangle_ = demangle; } void SetDemangle(bool demangle) { demangle_ = demangle; }
bool ReadMethodSymbol(MethodRec *method_record, bool ReadMethodSymbol(MethodRec *method_record,
@@ -276,11 +276,14 @@ TraceReader<T>::~TraceReader()
hash_entry_type *ptr; hash_entry_type *ptr;
for (ptr = hash_->GetFirst(); ptr; ptr = hash_->GetNext()) { for (ptr = hash_->GetFirst(); ptr; ptr = hash_->GetNext()) {
region_type *region = ptr->value; region_type *region = ptr->value;
int nsymbols = region->nsymbols; // If the symbols are not shared with another region, then delete them.
for (int ii = 0; ii < nsymbols; ii++) { if ((region->flags & region_type::kSharedSymbols) == 0) {
delete[] region->symbols[ii].name; int nsymbols = region->nsymbols;
for (int ii = 0; ii < nsymbols; ii++) {
delete[] region->symbols[ii].name;
}
delete[] region->symbols;
} }
delete[] region->symbols;
delete[] region->path; delete[] region->path;
// Do not delete the region itself here. Each region // Do not delete the region itself here. Each region
@@ -422,7 +425,7 @@ TraceReader<T>::GetNextProcess()
} }
template<class T> template<class T>
char* TraceReader<T>::GetProcessName(int pid) const char* TraceReader<T>::GetProcessName(int pid)
{ {
if (pid < 0 || pid >= kNumPids || processes_[pid] == NULL) if (pid < 0 || pid >= kNumPids || processes_[pid] == NULL)
return "(unknown)"; return "(unknown)";
@@ -1165,8 +1168,6 @@ void TraceReader<T>::HandlePidEvent(PidEvent *event)
} else { } else {
region->nsymbols = existing_region->nsymbols; region->nsymbols = existing_region->nsymbols;
region->symbols = existing_region->symbols; region->symbols = existing_region->symbols;
region->path = existing_region->path;
delete[] event->path;
region->flags |= region_type::kSharedSymbols; region->flags |= region_type::kSharedSymbols;
} }

View File

@@ -83,7 +83,7 @@ class TraceReaderBase {
friend class BBReader; friend class BBReader;
void Open(char *filename); void Open(const char *filename);
void Close(); void Close();
void WriteHeader(TraceHeader *header); void WriteHeader(TraceHeader *header);
inline bool ReadBB(BBEvent *event); inline bool ReadBB(BBEvent *event);
@@ -120,10 +120,10 @@ class TraceReaderBase {
private: private:
int FindNumInsns(uint64_t bb_num, uint64_t bb_start_time); int FindNumInsns(uint64_t bb_num, uint64_t bb_start_time);
void ReadTraceHeader(FILE *fstream, char *filename, void ReadTraceHeader(FILE *fstream, const char *filename,
char *tracename, TraceHeader *header); const char *tracename, TraceHeader *header);
PidEvent *FindMmapDexFileEvent(); PidEvent *FindMmapDexFileEvent();
void ParseDexList(char *filename); void ParseDexList(const char *filename);
char *static_filename_; char *static_filename_;
FILE *static_fstream_; FILE *static_fstream_;
@@ -159,7 +159,7 @@ class BBReader {
public: public:
explicit BBReader(TraceReaderBase *trace); explicit BBReader(TraceReaderBase *trace);
~BBReader(); ~BBReader();
void Open(char *filename); void Open(const char *filename);
void Close(); void Close();
bool ReadBB(BBEvent *event); bool ReadBB(BBEvent *event);
@@ -193,7 +193,7 @@ class InsnReader {
InsnReader(); InsnReader();
~InsnReader(); ~InsnReader();
void Open(char *filename); void Open(const char *filename);
void Close(); void Close();
uint64_t ReadInsnTime(uint64_t min_time); uint64_t ReadInsnTime(uint64_t min_time);
@@ -209,7 +209,7 @@ class AddrReader {
AddrReader(); AddrReader();
~AddrReader(); ~AddrReader();
bool Open(char *filename, char *suffix); bool Open(const char *filename, const char *suffix);
void Close(); void Close();
bool ReadAddr(uint64_t *time, uint32_t *addr); bool ReadAddr(uint64_t *time, uint32_t *addr);
@@ -225,7 +225,7 @@ class ExcReader {
ExcReader(); ExcReader();
~ExcReader(); ~ExcReader();
void Open(char *filename); void Open(const char *filename);
void Close(); void Close();
bool ReadExc(uint64_t *time, uint32_t *current_pc, bool ReadExc(uint64_t *time, uint32_t *current_pc,
uint64_t *recnum, uint32_t *target_pc, uint64_t *recnum, uint32_t *target_pc,
@@ -243,7 +243,7 @@ class PidReader {
PidReader(); PidReader();
~PidReader(); ~PidReader();
void Open(char *filename); void Open(const char *filename);
void Close(); void Close();
bool ReadPidEvent(struct PidEvent *event); bool ReadPidEvent(struct PidEvent *event);
void Dispose(struct PidEvent *event); void Dispose(struct PidEvent *event);
@@ -258,7 +258,7 @@ class MethodReader {
MethodReader(); MethodReader();
~MethodReader(); ~MethodReader();
bool Open(char *filename); bool Open(const char *filename);
void Close(); void Close();
bool ReadMethod(MethodRec *method_record); bool ReadMethod(MethodRec *method_record);