diff options
author | Vladislav Vaintroub <wlad@mariadb.com> | 2016-04-09 17:03:48 +0200 |
---|---|---|
committer | Vladislav Vaintroub <wlad@mariadb.com> | 2016-04-09 17:03:48 +0200 |
commit | cd776fedba3e2902bc25ee206d6e6266e7eb9411 (patch) | |
tree | 95bf82d0e0522c6af708cd28639c82e004b5a264 /mysys/lf_alloc-pin.c | |
parent | f884d233e6a5f68bab846a7bdbd041fc4415ad77 (diff) | |
parent | d516a2ae0cbd09d3b5b1667ec62b421330ab9902 (diff) | |
download | mariadb-git-10.2-connector-c-integ.tar.gz |
Merge branch '10.2' into 10.2-connector-c-integ10.2-connector-c-integ
Diffstat (limited to 'mysys/lf_alloc-pin.c')
-rw-r--r-- | mysys/lf_alloc-pin.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/mysys/lf_alloc-pin.c b/mysys/lf_alloc-pin.c index f8a15829fb1..b349ef88ed1 100644 --- a/mysys/lf_alloc-pin.c +++ b/mysys/lf_alloc-pin.c @@ -103,6 +103,12 @@ #include <my_sys.h> #include <lf.h> +/* + when using alloca() leave at least that many bytes of the stack - + for functions we might be calling from within this stack frame +*/ +#define ALLOCA_SAFETY_MARGIN 8192 + #define LF_PINBOX_MAX_PINS 65536 static void lf_pinbox_real_free(LF_PINS *pins); @@ -345,7 +351,8 @@ static void lf_pinbox_real_free(LF_PINS *pins) { int alloca_size= sizeof(void *)*LF_PINBOX_PINS*npins; /* create a sorted list of pinned addresses, to speed up searches */ - if (available_stack_size(&pinbox, *pins->stack_ends_here) > alloca_size) + if (available_stack_size(&pinbox, *pins->stack_ends_here) > + alloca_size + ALLOCA_SAFETY_MARGIN) { struct st_harvester hv; addr= (void **) alloca(alloca_size); |