Here is a simple test program that reproduce the issue on mac:
lib.h:
#include "lib.h"
void set_index(int index, int value);
int get_index(int index);
lib.c:
#include "lib.h"
static int glob_var[] = {0,0,0,0};
void set_index(int index, int value) {
glob_var[index] = value;
}
int get_index(int index) {
return glob_var[index];
}
main.c:
#include <stdio.h>
#include <dlfcn.h>
#include "lib.h"
int main() {
void *handle = dlopen ("lib.so",0);
set_index(0,1);
dlclose(handle);
handle = dlopen ("lib.so",0);
printf("%d\n",get_index(0));
return 0;
}
shell> gcc -o lib.so -shared lib.c
shell> gcc -o main main.c lib.so
shell> ./main
On Monday, February 13, 2012 11:16:41 AM Stas Malyshev wrote:
> Hi!
>
> > I'm not familiar with Mac, but I saw such behavior on Linux very long
> > time ago, when on PHP restart static variables were still keep values
> > from old process.
>
> That might happen if the shared library was not unloaded (dlopen will
> not re-load library that is already loaded) however I don't understand
> how it can happen on Apache - it's supposed to dlclose all modules. Is
> it reproducible on any Apache version on Linux or Mac?
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php
