Initialize sock_fd in constructor
Add destructors to free allocated memory
Don't call exit() so the destructors actually get executed
12 files changed:
+BufferState::~BufferState()
+{
+ delete[] data;
+}
+
void BufferState::set_data(unsigned sz, const void *ptr, GLenum use)
{
usage = use;
void BufferState::set_data(unsigned sz, const void *ptr, GLenum use)
{
usage = use;
std::vector<Array> arrays;
BufferContent();
std::vector<Array> arrays;
BufferContent();
void update(const ArrayState &);
void update_elements(GLenum);
std::string describe() const;
void update(const ArrayState &);
void update_elements(GLenum);
std::string describe() const;
BufferContent content;
BufferState();
BufferContent content;
BufferState();
void set_data(unsigned, const void *, GLenum);
void set_sub_data(unsigned, unsigned, const void *);
std::string describe() const;
void set_data(unsigned, const void *, GLenum);
void set_sub_data(unsigned, unsigned, const void *);
std::string describe() const;
decoder->gldBreak = gldBreak;
}
decoder->gldBreak = gldBreak;
}
+Inspector::~Inspector()
+{
+ gldecoder_delete(decoder);
+}
+
void Inspector::decode(const char *data, unsigned len)
{
if(query_state)
void Inspector::decode(const char *data, unsigned len)
{
if(query_state)
public:
Inspector(GlDbg &);
public:
Inspector(GlDbg &);
virtual void decode(const char *, unsigned);
virtual void process_started();
virtual void decode(const char *, unsigned);
virtual void process_started();
decoder->glXSwapBuffers = glXSwapBuffers;
}
decoder->glXSwapBuffers = glXSwapBuffers;
}
+Profiler::~Profiler()
+{
+ gldecoder_delete(decoder);
+}
+
void Profiler::decode(const char *data, unsigned len)
{
if(enabled)
void Profiler::decode(const char *data, unsigned len)
{
if(enabled)
public:
Profiler(GlDbg &);
public:
Profiler(GlDbg &);
virtual void decode(const char *, unsigned);
private:
virtual void decode(const char *, unsigned);
private:
+CommandInterpreter::~CommandInterpreter()
+{
+ for(CommandMap::iterator i=commands.begin(); i!=commands.end(); ++i)
+ delete i->second;
+}
+
void CommandInterpreter::execute(const string &cmd)
{
unsigned space = cmd.find(' ');
void CommandInterpreter::execute(const string &cmd)
{
unsigned space = cmd.find(' ');
public:
CommandInterpreter(GlDbg &);
public:
CommandInterpreter(GlDbg &);
template<typename T>
Command ®ister_command(const std::string &n, T *o, void (T::*f)(const std::string &))
template<typename T>
Command ®ister_command(const std::string &n, T *o, void (T::*f)(const std::string &))
GlDbg *GlDbg::instance = 0;
GlDbg::GlDbg(int argc, char **argv):
GlDbg *GlDbg::instance = 0;
GlDbg::GlDbg(int argc, char **argv):
cmd_interp(*this),
process(vector<string>(argv+1, argv+argc)),
cmd_interp(*this),
process(vector<string>(argv+1, argv+argc)),
buf_offset(0),
flushing(false),
got_sigchld(false),
buf_offset(0),
flushing(false),
got_sigchld(false),
printf("Copyright © 2009-2010 Mikkosoft Productions\n");
printf("Type \"help\" for a list of commands\n");
printf("Copyright © 2009-2010 Mikkosoft Productions\n");
printf("Type \"help\" for a list of commands\n");
{
if(!force && process.get_state()!=Process::INACTIVE)
throw runtime_error("Program is still running");
{
if(!force && process.get_state()!=Process::INACTIVE)
throw runtime_error("Program is still running");
free(line);
}
else if(pstate==Process::INACTIVE)
free(line);
}
else if(pstate==Process::INACTIVE)
typedef std::list<Breakpoint> BreakList;
typedef std::list<Breakpoint> BreakList;
CommandInterpreter cmd_interp;
Process process;
int sock_fd;
CommandInterpreter cmd_interp;
Process process;
int sock_fd;
+Grabber::~Grabber()
+{
+ gldecoder_delete(decoder);
+}
+
void Grabber::decode(const char *data, unsigned len)
{
gldecoder_decode(decoder, data, len);
void Grabber::decode(const char *data, unsigned len)
{
gldecoder_decode(decoder, data, len);
public:
Grabber(GlDbg &);
public:
Grabber(GlDbg &);
private:
void flavor_init();
private:
void flavor_init();