|
@@ -101,6 +101,7 @@ static struct ordered_event *alloc_event(struct ordered_events *oe,
|
|
|
struct list_head *cache = &oe->cache;
|
|
|
struct ordered_event *new = NULL;
|
|
|
union perf_event *new_event;
|
|
|
+ size_t size;
|
|
|
|
|
|
new_event = dup_event(oe, event);
|
|
|
if (!new_event)
|
|
@@ -133,6 +134,8 @@ static struct ordered_event *alloc_event(struct ordered_events *oe,
|
|
|
* Removal of ordered event object moves it from events to
|
|
|
* the cache list.
|
|
|
*/
|
|
|
+ size = sizeof(*oe->buffer) + MAX_SAMPLE_BUFFER * sizeof(*new);
|
|
|
+
|
|
|
if (!list_empty(cache)) {
|
|
|
new = list_entry(cache->next, struct ordered_event, list);
|
|
|
list_del(&new->list);
|
|
@@ -140,10 +143,7 @@ static struct ordered_event *alloc_event(struct ordered_events *oe,
|
|
|
new = &oe->buffer->event[oe->buffer_idx];
|
|
|
if (++oe->buffer_idx == MAX_SAMPLE_BUFFER)
|
|
|
oe->buffer = NULL;
|
|
|
- } else if (oe->cur_alloc_size < oe->max_alloc_size) {
|
|
|
- size_t size = sizeof(*oe->buffer) +
|
|
|
- MAX_SAMPLE_BUFFER * sizeof(*new);
|
|
|
-
|
|
|
+ } else if ((oe->cur_alloc_size + size) < oe->max_alloc_size) {
|
|
|
oe->buffer = malloc(size);
|
|
|
if (!oe->buffer) {
|
|
|
free_dup_event(oe, new_event);
|