[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [53710] trunk/blender/source: add a segfault handler that writes out the info log into a crash file alongside the blend file .
Dominik Maier
codepoint92 at gmail.com
Thu Jan 10 20:49:33 CET 2013
Hello everyone,
i cant compile after this commit anymore. Error in creator.c: undefined
reference to `kill'
I am on win7 64bit.
Windows doesnt seem to support the kill function.
Thanks.
Best regards,
Dominik Maier
2013/1/10 Campbell Barton <ideasman42 at gmail.com>
> Revision: 53710
>
> http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=53710
> Author: campbellbarton
> Date: 2013-01-10 16:37:48 +0000 (Thu, 10 Jan 2013)
> Log Message:
> -----------
> add a segfault handler that writes out the info log into a crash file
> alongside the blend file.
>
> Modified Paths:
> --------------
> trunk/blender/source/blender/blenkernel/BKE_report.h
> trunk/blender/source/blender/blenkernel/intern/report.c
> trunk/blender/source/blender/blenloader/intern/runtime.c
> trunk/blender/source/blender/editors/space_file/file_ops.c
> trunk/blender/source/blender/render/intern/source/pipeline.c
> trunk/blender/source/blender/render/intern/source/render_result.c
> trunk/blender/source/creator/creator.c
>
> Modified: trunk/blender/source/blender/blenkernel/BKE_report.h
> ===================================================================
> --- trunk/blender/source/blender/blenkernel/BKE_report.h 2013-01-10
> 16:11:12 UTC (rev 53709)
> +++ trunk/blender/source/blender/blenkernel/BKE_report.h 2013-01-10
> 16:37:48 UTC (rev 53710)
> @@ -72,7 +72,10 @@
> Report *BKE_reports_last_displayable(ReportList *reports);
>
> int BKE_reports_contain(ReportList *reports, ReportType level);
> -
> +
> +// int BKE_report_write_file_fp(struct FILE *fp, ReportList *reports,
> const char *header);
> +bool BKE_report_write_file(const char *filepath, ReportList *reports,
> const char *header);
> +
> #ifdef __cplusplus
> }
> #endif
>
> Modified: trunk/blender/source/blender/blenkernel/intern/report.c
> ===================================================================
> --- trunk/blender/source/blender/blenkernel/intern/report.c 2013-01-10
> 16:11:12 UTC (rev 53709)
> +++ trunk/blender/source/blender/blenkernel/intern/report.c 2013-01-10
> 16:37:48 UTC (rev 53710)
> @@ -27,6 +27,10 @@
> * \ingroup bke
> */
>
> +#include <stdarg.h>
> +#include <stdio.h>
> +#include <string.h>
> +#include <errno.h>
>
> #include "MEM_guardedalloc.h"
>
> @@ -39,10 +43,6 @@
> #include "BKE_report.h"
> #include "BKE_global.h" /* G.background only */
>
> -#include <stdarg.h>
> -#include <stdio.h>
> -#include <string.h>
> -
> static const char *report_type_str(int type)
> {
> switch (type) {
> @@ -302,3 +302,38 @@
> return FALSE;
> }
>
> +static bool BKE_report_write_file_fp(FILE *fp, ReportList *reports, const
> char *header)
> +{
> + Report *report;
> +
> + if (header) {
> + fputs(header, fp);
> + }
> +
> + for (report = reports->list.first; report; report = report->next) {
> + fprintf((FILE *)fp, "%s # %s\n", report->message,
> report->typestr);
> + }
> +
> + return true;
> +}
> +
> +bool BKE_report_write_file(const char *filepath, ReportList *reports,
> const char *header)
> +{
> + FILE *fp;
> +
> + /* first try create the file, if it exists call without 'O_CREAT',
> + * to avoid writing to a symlink - use 'O_EXCL' (CVE-2008-1103) */
> + errno = 0;
> + fp = BLI_fopen(filepath, "wb");
> + if (fp == NULL) {
> + fprintf(stderr, "Unable to save '%s': %s\n",
> + filepath, errno ? strerror(errno) : "Unknown error
> opening file");
> + return false;
> + }
> +
> + BKE_report_write_file_fp(fp, reports, header);
> +
> + fclose(fp);
> +
> + return true;
> +}
>
> Modified: trunk/blender/source/blender/blenloader/intern/runtime.c
> ===================================================================
> --- trunk/blender/source/blender/blenloader/intern/runtime.c 2013-01-10
> 16:11:12 UTC (rev 53709)
> +++ trunk/blender/source/blender/blenloader/intern/runtime.c 2013-01-10
> 16:37:48 UTC (rev 53710)
> @@ -48,11 +48,12 @@
> #include "BLO_readfile.h"
> #include "BLO_runtime.h"
>
> +#include "BLI_blenlib.h"
> +#include "BLI_utildefines.h"
> +
> #include "BKE_blender.h"
> #include "BKE_report.h"
>
> -#include "BLI_blenlib.h"
> -
> /* Runtime reading */
>
> static int handle_read_msb_int(int handle)
>
> Modified: trunk/blender/source/blender/editors/space_file/file_ops.c
> ===================================================================
> --- trunk/blender/source/blender/editors/space_file/file_ops.c 2013-01-10
> 16:11:12 UTC (rev 53709)
> +++ trunk/blender/source/blender/editors/space_file/file_ops.c 2013-01-10
> 16:37:48 UTC (rev 53710)
> @@ -28,6 +28,8 @@
> * \ingroup spfile
> */
>
> +#include "BLI_blenlib.h"
> +#include "BLI_utildefines.h"
>
> #include "BKE_context.h"
> #include "BKE_screen.h"
> @@ -35,9 +37,6 @@
> #include "BKE_report.h"
> #include "BKE_main.h"
>
> -#include "BLI_blenlib.h"
> -#include "BLI_utildefines.h"
> -
> #ifdef WIN32
> # include "BLI_winstuff.h"
> #endif
>
> Modified: trunk/blender/source/blender/render/intern/source/pipeline.c
> ===================================================================
> --- trunk/blender/source/blender/render/intern/source/pipeline.c
> 2013-01-10 16:11:12 UTC (rev 53709)
> +++ trunk/blender/source/blender/render/intern/source/pipeline.c
> 2013-01-10 16:37:48 UTC (rev 53710)
> @@ -45,6 +45,16 @@
>
> #include "MEM_guardedalloc.h"
>
> +#include "BLI_math.h"
> +#include "BLI_rect.h"
> +#include "BLI_listbase.h"
> +#include "BLI_string.h"
> +#include "BLI_path_util.h"
> +#include "BLI_fileops.h"
> +#include "BLI_threads.h"
> +#include "BLI_rand.h"
> +#include "BLI_callbacks.h"
> +
> #include "BKE_animsys.h" /* <------ should this be here?, needed for
> sequencer update */
> #include "BKE_camera.h"
> #include "BKE_global.h"
> @@ -57,16 +67,6 @@
> #include "BKE_sequencer.h"
> #include "BKE_writeavi.h" /* <------ should be replaced once with
> generic movie module */
>
> -#include "BLI_math.h"
> -#include "BLI_rect.h"
> -#include "BLI_listbase.h"
> -#include "BLI_string.h"
> -#include "BLI_path_util.h"
> -#include "BLI_fileops.h"
> -#include "BLI_threads.h"
> -#include "BLI_rand.h"
> -#include "BLI_callbacks.h"
> -
> #include "PIL_time.h"
> #include "IMB_colormanagement.h"
> #include "IMB_imbuf.h"
>
> Modified: trunk/blender/source/blender/render/intern/source/render_result.c
> ===================================================================
> --- trunk/blender/source/blender/render/intern/source/render_result.c
> 2013-01-10 16:11:12 UTC (rev 53709)
> +++ trunk/blender/source/blender/render/intern/source/render_result.c
> 2013-01-10 16:37:48 UTC (rev 53710)
> @@ -35,11 +35,6 @@
>
> #include "MEM_guardedalloc.h"
>
> -#include "BKE_image.h"
> -#include "BKE_global.h"
> -#include "BKE_main.h"
> -#include "BKE_report.h"
> -
> #include "BLI_fileops.h"
> #include "BLI_listbase.h"
> #include "BLI_path_util.h"
> @@ -48,6 +43,11 @@
> #include "BLI_threads.h"
> #include "BLI_utildefines.h"
>
> +#include "BKE_image.h"
> +#include "BKE_global.h"
> +#include "BKE_main.h"
> +#include "BKE_report.h"
> +
> #include "IMB_imbuf.h"
> #include "IMB_imbuf_types.h"
> #include "IMB_colormanagement.h"
>
> Modified: trunk/blender/source/creator/creator.c
> ===================================================================
> --- trunk/blender/source/creator/creator.c 2013-01-10 16:11:12 UTC
> (rev 53709)
> +++ trunk/blender/source/creator/creator.c 2013-01-10 16:37:48 UTC
> (rev 53710)
> @@ -41,6 +41,12 @@
> #endif
>
> #ifdef WIN32
> +# include <process.h> /* getpid */
> +#else
> +# include <unistd.h> /* getpid */
> +#endif
> +
> +#ifdef WIN32
> # include <Windows.h>
> # include "utfconv.h"
> #endif
> @@ -157,6 +163,8 @@
> /* Initialize callbacks for the modules that need them */
> static void setCallbacks(void);
>
> +static bool use_crash_handler = true;
> +
> #ifndef WITH_PYTHON_MODULE
>
> /* set breakpoints here when running in debug mode, useful to catch
> floating point errors */
> @@ -246,6 +254,7 @@
> printf("Misc Options:\n");
> BLI_argsPrintArgDoc(ba, "--debug");
> BLI_argsPrintArgDoc(ba, "--debug-fpe");
> + BLI_argsPrintArgDoc(ba, "--disable-crash-handler");
>
> #ifdef WITH_FFMPEG
> BLI_argsPrintArgDoc(ba, "--debug-ffmpeg");
> @@ -350,6 +359,12 @@
> return 0;
> }
>
> +static int disable_crash_handler(int UNUSED(argc), const char
> **UNUSED(argv), void *UNUSED(data))
> +{
> + use_crash_handler = false;
> + return 0;
> +}
> +
> static int background_mode(int UNUSED(argc), const char **UNUSED(argv),
> void *UNUSED(data))
> {
> G.background = 1;
> @@ -423,6 +438,56 @@
> return 0;
> }
>
> +static void blender_crash_handler(int signum)
> +{
> +
> +#if 0
> + {
> + char fname[FILE_MAX];
> +
> + if (!G.main->name[0]) {
> + BLI_make_file_string("/", fname,
> BLI_temporary_dir(), "crash.blend");
> + }
> + else {
> + BLI_strncpy(fname, G.main->name, sizeof(fname));
> + BLI_replace_extension(fname, sizeof(fname),
> ".crash.blend");
> + }
> +
> + printf("Writing: %s\n", fname);
> + fflush(stdout);
> +
> + BKE_undo_save_file(fname);
> + }
> +#endif
> +
> + {
> + char header[512];
> + wmWindowManager *wm = G.main->wm.first;
> +
> + char fname[FILE_MAX];
> +
> + if (!G.main->name[0]) {
> + BLI_make_file_string("/", fname,
> BLI_temporary_dir(), "blender.crash.txt");
> + }
> + else {
> + BLI_strncpy(fname, G.main->name, sizeof(fname));
> + BLI_replace_extension(fname, sizeof(fname),
> ".crash.txt");
> + }
> +
> + printf("Writing: %s\n", fname);
> + fflush(stdout);
> +
> + BLI_snprintf(header, sizeof(header), "# "
> BLEND_VERSION_STRING_FMT);
> +
> + BKE_report_write_file(fname, &wm->reports, header);
> + }
> +
> + /* really crash */
> + signal(signum, SIG_DFL);
> + kill(getpid(), signum);
> +}
> +
> +
> static int set_factory_startup(int UNUSED(argc), const char
> **UNUSED(argv), void *UNUSED(data))
> {
> G.factory_startup = 1;
> @@ -1122,6 +1187,8 @@
> BLI_argsAdd(ba, 1, "-y", "--enable-autoexec", "\n\tEnable
> automatic python script execution" PY_ENABLE_AUTO, enable_python, NULL);
> BLI_argsAdd(ba, 1, "-Y", "--disable-autoexec", "\n\tDisable
> automatic python script execution (pydrivers & startup scripts)"
> PY_DISABLE_AUTO, disable_python, NULL);
>
> + BLI_argsAdd(ba, 1, NULL, "--disable-crash-handler", "\n\tDisable
> the crash handler", disable_crash_handler, NULL);
> +
> #undef PY_ENABLE_AUTO
> #undef PY_DISABLE_AUTO
>
> @@ -1301,6 +1368,10 @@
> BLI_argsParse(ba, 1, NULL, NULL);
> #endif
>
> + if (use_crash_handler) {
> + /* after parsing args */
> + signal(SIGSEGV, blender_crash_handler);
> + }
>
> /* after level 1 args, this is so playanim skips RNA init */
> RNA_init();
>
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>
More information about the Bf-committers
mailing list