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

Reply via email to