diff options
Diffstat (limited to 'vpx_mem/memory_manager/hmm_dflt_abort.c')
-rw-r--r-- | vpx_mem/memory_manager/hmm_dflt_abort.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/vpx_mem/memory_manager/hmm_dflt_abort.c b/vpx_mem/memory_manager/hmm_dflt_abort.c new file mode 100644 index 000000000..dc59f5507 --- /dev/null +++ b/vpx_mem/memory_manager/hmm_dflt_abort.c @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2010 The VP8 project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license and patent + * grant that can be found in the LICENSE file in the root of the source + * tree. All contributing project authors may be found in the AUTHORS + * file in the root of the source tree. + */ + + +/* This code is in the public domain. +** Version: 1.1 Author: Walt Karas +*/ + +/* The function in this file performs default actions if self-auditing +** finds heap corruption. Don't rely on this code to handle the +** case where HMM is being used to implement the malloc and free standard +** library functions. Rewrite the function if necessary to avoid using +** I/O and execution termination functions that call malloc or free. +** In Unix, for example, you would replace the fputs calls with calls +** to the write system call using file handle number 2. +*/ +#include "hmm_intrnl.h" +#include <stdio.h> +#include <stdlib.h> + +static int entered = 0; + +/* Print abort message, file and line. Terminate execution. +*/ +void hmm_dflt_abort(const char *file, const char *line) +{ + /* Avoid use of printf(), which is more likely to use heap. */ + + if (entered) + + /* The standard I/O functions called a heap function and caused + ** an indirect recursive call to this function. So we'll have + ** to just exit without printing a message. */ + while (1); + + entered = 1; + + fputs("\n_abort - Heap corruption\n" "File: ", stderr); + fputs(file, stderr); + fputs(" Line: ", stderr); + fputs(line, stderr); + fputs("\n\n", stderr); + fputs("hmm_dflt_abort: while(1)!!!\n", stderr); + fflush(stderr); + + while (1); +} |