trace: Prevent segfault when passing NULL to set_vertex_buffers.
authorJosé Fonseca <jfonseca@vmware.com>
Mon, 5 Nov 2012 11:18:07 +0000 (11:18 +0000)
committerJosé Fonseca <jfonseca@vmware.com>
Mon, 5 Nov 2012 11:18:07 +0000 (11:18 +0000)
State tracker now passes NULL buffer array to unbind buffers.

src/gallium/drivers/trace/tr_context.c
src/gallium/drivers/trace/tr_dump.h

index ba1882ea6525e97bef9dc49394c018771db6998f..fed95c62a5cf1ba868e8bad12187ce886d74e679 100644 (file)
@@ -1077,7 +1077,7 @@ trace_context_set_vertex_buffers(struct pipe_context *_pipe,
    trace_dump_struct_array(vertex_buffer, buffers, num_buffers);
    trace_dump_arg_end();
 
-   if (num_buffers) {
+   if (buffers) {
       struct pipe_vertex_buffer *_buffers = MALLOC(num_buffers * sizeof(*_buffers));
       memcpy(_buffers, buffers, num_buffers * sizeof(*_buffers));
       for (i = 0; i < num_buffers; i++)
index 5739e8694a0ed3f06e76e46d5f4191c696134a66..ef0129281c1de6e028e446dd1429bfd9f0d4e781 100644 (file)
@@ -137,26 +137,34 @@ void trace_dump_transfer_ptr(struct pipe_transfer *_transfer);
 
 #define trace_dump_array(_type, _obj, _size) \
    do { \
-      size_t idx; \
-      trace_dump_array_begin(); \
-      for(idx = 0; idx < (_size); ++idx) { \
-         trace_dump_elem_begin(); \
-         trace_dump_##_type((_obj)[idx]); \
-         trace_dump_elem_end(); \
+      if (_obj) { \
+         size_t idx; \
+         trace_dump_array_begin(); \
+         for(idx = 0; idx < (_size); ++idx) { \
+            trace_dump_elem_begin(); \
+            trace_dump_##_type((_obj)[idx]); \
+            trace_dump_elem_end(); \
+         } \
+         trace_dump_array_end(); \
+      } else { \
+         trace_dump_null(); \
       } \
-      trace_dump_array_end(); \
    } while(0)
 
 #define trace_dump_struct_array(_type, _obj, _size) \
    do { \
-      size_t idx; \
-      trace_dump_array_begin(); \
-      for(idx = 0; idx < (_size); ++idx) { \
-         trace_dump_elem_begin(); \
-         trace_dump_##_type(&(_obj)[idx]); \
-         trace_dump_elem_end(); \
+      if (_obj) { \
+         size_t idx; \
+         trace_dump_array_begin(); \
+         for(idx = 0; idx < (_size); ++idx) { \
+            trace_dump_elem_begin(); \
+            trace_dump_##_type(&(_obj)[idx]); \
+            trace_dump_elem_end(); \
+         } \
+         trace_dump_array_end(); \
+      } else { \
+         trace_dump_null(); \
       } \
-      trace_dump_array_end(); \
    } while(0)
 
 #define trace_dump_member(_type, _obj, _member) \