diff --git a/src/video/haiku/SDL_BWin.h b/src/video/haiku/SDL_BWin.h index da84dd5cf..15340596b 100644 --- a/src/video/haiku/SDL_BWin.h +++ b/src/video/haiku/SDL_BWin.h @@ -86,6 +86,7 @@ class SDL_BWin:public BDirectWindow _buffer_locker = new BLocker(); _bitmap = NULL; _clips = NULL; + _num_clips = 0; #ifdef DRAWTHREAD _draw_thread_id = spawn_thread(HAIKU_DrawThread, "drawing_thread", @@ -179,13 +180,17 @@ class SDL_BWin:public BDirectWindow _connected = true; case B_DIRECT_MODIFY: - if(_clips) { - free(_clips); - _clips = NULL; + if (info->clip_list_count > _num_clips) + { + if(_clips) { + free(_clips); + _clips = NULL; + } } _num_clips = info->clip_list_count; - _clips = (clipping_rect *)malloc(_num_clips*sizeof(clipping_rect)); + if (_clips == NULL) + _clips = (clipping_rect *)malloc(_num_clips*sizeof(clipping_rect)); if(_clips) { memcpy(_clips, info->clip_list, _num_clips*sizeof(clipping_rect)); @@ -652,7 +657,7 @@ private: clipping_rect _bounds; BLocker *_buffer_locker; clipping_rect *_clips; - int32 _num_clips; + uint32 _num_clips; int32 _bytes_per_px; thread_id _draw_thread_id;