From: Zachary F. <zak...@gm...> - 2008-12-18 17:26:13
|
I'm using several Canon 350D cameras for some experiments, controlled with libgphoto routines. Each camera captures 2 images every couple minutes, 5 or 6 seconds apart. I've found that eventually the code segfaults during an acquisition. Here is the relevant part of the code: int captureImage(Camera *camera, GPContext *context, char *filename, HANDLE hDevice) { int res; CameraFile *camFile; CHECK(gp_file_new(&camFile)); CHECK(gp_camera_capture_preview(camera, camFile, context, hDevice)); CHECK(gp_file_save(camFile, filename)); CHECK(gp_file_free(camFile)); return 0; } The HANDLE is just a reference to a DAQ board, which must be addressed from within the capture preview function. I'm confident that this hack does not cause the segfault. Since the crash occurs at apparently random times, it has been hard for me to debug, although I do know that the segfault occurs at this line of the gp_file_save function: if (fwrite (file->data, (size_t)sizeof(char), (size_t)file->size, fp) != (size_t)file->size) { The camera is shooting with no memory card, on PC connection communication mode, shooting RAW. There is no significant memory leak, so that at the point of the segfault there is at least 1GB free RAM. Does anyone have an idea what could cause the code to work fine for several thousand acquisitions, then segfault? Should I be referencing/unreferencing the file? Is it possible that the camera fails to return a valid capture in the data pointer, and trying to save this data causes the crash? In that case, shouldn't a warning interrupt the gp_file_save routine? Thanks for any help you can provide. Zak |