Skip to content

Commit 5c9f0b9

Browse files
committed
couple of surface/script mem leak fixes proposal.
1 parent 7412ed8 commit 5c9f0b9

File tree

5 files changed

+19
-19
lines changed

5 files changed

+19
-19
lines changed

Diff for: lib/xgraph/xgraph.cpp

+12-14
Original file line numberDiff line numberDiff line change
@@ -221,9 +221,9 @@ int XGR_Screen::init(int x,int y,int flags_in)
221221
}
222222

223223
void XGR_Screen::create_surfaces(int width, int height) {
224-
XGR_ScreenSurface = new uint8_t[width * height] {0};
225-
XGR_ScreenSurface2D = new uint8_t[width * height] {0};
226-
XGR_ScreenSurface2DRgba = new uint32_t[width * height] {0};
224+
XGR_ScreenSurface.reset(new uint8_t[width * height] {0});
225+
XGR_ScreenSurface2D.reset(new uint8_t[width * height] {0});
226+
XGR_ScreenSurface2DRgba.reset(new uint32_t[width * height] {0});
227227

228228
std::cout<<"XGR32_ScreenSurface = SDL_CreateRGBSurface"<<std::endl;
229229
XGR32_ScreenSurface = SDL_CreateRGBSurface(0, width, height, 32, 0, 0, 0, 0);
@@ -293,9 +293,6 @@ void XGR_Screen::destroy_surfaces() {
293293

294294
SDL_UnlockSurface(XGR32_ScreenSurface);
295295

296-
delete[] XGR_ScreenSurface;
297-
delete[] XGR_ScreenSurface2D;
298-
delete[] XGR_ScreenSurface2DRgba;
299296
SDL_FreeSurface(XGR32_ScreenSurface);
300297

301298
sdlTexture = nullptr;
@@ -867,27 +864,27 @@ uint8_t* XGR_Screen::get_active_render_buffer() {
867864
}
868865

869866
uint8_t* XGR_Screen::get_default_render_buffer() {
870-
return XGR_ScreenSurface;
867+
return XGR_ScreenSurface.get();
871868
}
872869

873870
uint8_t* XGR_Screen::get_2d_render_buffer() {
874-
return XGR_ScreenSurface2D;
871+
return XGR_ScreenSurface2D.get();
875872
}
876873

877874
uint32_t* XGR_Screen::get_2d_rgba_render_buffer() {
878-
return XGR_ScreenSurface2DRgba;
875+
return XGR_ScreenSurface2DRgba.get();
879876
}
880877

881878
void XGR_Screen::set_active_render_buffer(uint8_t *buf) {
882879
ScreenBuf = (unsigned char*)buf;
883880
}
884881

885882
void XGR_Screen::set_default_render_buffer() {
886-
set_active_render_buffer(XGR_ScreenSurface);
883+
set_active_render_buffer(get_default_render_buffer());
887884
}
888885

889886
void XGR_Screen::set_2d_render_buffer() {
890-
set_active_render_buffer(XGR_ScreenSurface2D);
887+
set_active_render_buffer(get_2d_render_buffer());
891888
}
892889

893890
SDL_Surface* XGR_Screen::get_screenshot() {
@@ -930,7 +927,7 @@ void XGR_Screen::flip()
930927
void *pixels;
931928
int pitch;
932929
SDL_LockTexture(sdlTexture, NULL, &pixels, &pitch);
933-
blitRgba((uint32_t*)pixels, XGR_ScreenSurface, XGR_ScreenSurface2DRgba, XGR_ScreenSurface2D);
930+
blitRgba((uint32_t*)pixels, get_default_render_buffer(), get_2d_rgba_render_buffer(), get_2d_render_buffer());
934931
SDL_UnlockTexture(sdlTexture);
935932

936933
SDL_RenderClear(sdlRenderer);
@@ -1023,8 +1020,9 @@ void XGR_Screen::flush(int x,int y,int sx,int sy)
10231020

10241021
void XGR_Screen::fill(int col, void* buffer)
10251022
{
1026-
if (buffer == XGR_ScreenSurface2DRgba) {
1027-
memset(XGR_ScreenSurface2DRgba, col, ScreenX * ScreenY * 4);
1023+
auto surface2dRgba = XGR_ScreenSurface2DRgba.get();
1024+
if (buffer == surface2dRgba) {
1025+
memset(surface2dRgba, col, ScreenX * ScreenY * 4);
10281026
} else {
10291027
memset(buffer == NULL ? ScreenBuf : buffer, col, ScreenX * ScreenY);
10301028
}

Diff for: lib/xgraph/xgraph.h

+3-3
Original file line numberDiff line numberDiff line change
@@ -195,9 +195,9 @@ struct XGR_Screen
195195

196196
uint8_t *ScreenBuf;
197197

198-
uint8_t *XGR_ScreenSurface;
199-
uint8_t *XGR_ScreenSurface2D;
200-
uint32_t *XGR_ScreenSurface2DRgba;
198+
std::unique_ptr<uint8_t[]> XGR_ScreenSurface;
199+
std::unique_ptr<uint8_t[]> XGR_ScreenSurface2D;
200+
std::unique_ptr<uint32_t[]> XGR_ScreenSurface2DRgba;
201201
SDL_Surface *XGR32_ScreenSurface;
202202

203203
SDL_Surface *IconSurface;

Diff for: lib/xtool/xglobal.h

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include <string.h>
1616
#include <stdio.h>
1717
#include <time.h>
18+
#include <memory>
1819

1920
#ifdef __WORDSIZE
2021
#else

Diff for: src/actint/ascript.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -581,7 +581,7 @@ aciLocationShutterInfo* locSh;
581581
aciWorldMap* wMap;
582582
aciWorldInfo* wData;
583583

584-
actIntDispatcher* aScrDisp;
584+
std::unique_ptr<actIntDispatcher> aScrDisp;
585585

586586
int aciCurCredits03 = 0;
587587

@@ -605,7 +605,7 @@ void aParseScript(const char* fname,const char* bname)
605605
invMatrix* mtx;
606606
invItem* itm;
607607

608-
aScrDisp = new actIntDispatcher;
608+
aScrDisp.reset(new actIntDispatcher);
609609
aciML_D = new aciML_Dispatcher;
610610

611611
#ifndef _BINARY_SCRIPT_

Diff for: src/global.h

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <math.h>
99
#include <time.h>
1010
#include <ctime>
11+
#include <memory>
1112

1213
#if (defined(__unix__) || defined(__APPLE__))
1314
#include <dirent.h>

0 commit comments

Comments
 (0)