]> git.sur5r.net Git - openldap/blobdiff - servers/slapd/back-shell/init.c
Cleanup up LDAP_CLIENT_UPDATE code... including some bug fixing.
[openldap] / servers / slapd / back-shell / init.c
index 1a83449d14d890771ada39ec5e2401b0db3dc9fb..03ab2d18011c49b48b908b2d9c3e6fcaceae87a7 100644 (file)
@@ -1,7 +1,7 @@
 /* init.c - initialize shell backend */
 /* $OpenLDAP$ */
 /*
- * Copyright 1998-2000 The OpenLDAP Foundation, All Rights Reserved.
+ * Copyright 1998-2002 The OpenLDAP Foundation, All Rights Reserved.
  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
  */
 
@@ -10,6 +10,7 @@
 #include <stdio.h>
 
 #include <ac/socket.h>
+#include <ac/unistd.h>
 
 #include "slap.h"
 #include "shell.h"
@@ -37,14 +38,13 @@ shell_back_initialize(
        bi->bi_open = 0;
        bi->bi_config = 0;
        bi->bi_close = 0;
-       bi->bi_destroy = 0;
+       bi->bi_destroy = shell_back_destroy;
 
        bi->bi_db_init = shell_back_db_init;
        bi->bi_db_config = shell_back_db_config;
        bi->bi_db_open = 0;
        bi->bi_db_close = 0;
        bi->bi_db_destroy = shell_back_db_destroy;
-       bi->bi_db_sync = 0;
 
        bi->bi_op_bind = shell_back_bind;
        bi->bi_op_unbind = shell_back_unbind;
@@ -65,6 +65,32 @@ shell_back_initialize(
        bi->bi_connection_init = 0;
        bi->bi_connection_destroy = 0;
 
+#ifdef SHELL_SURROGATE_PARENT
+       ldap_pvt_thread_mutex_init( &shell_surrogate_index_mutex );
+       ldap_pvt_thread_mutex_init( &shell_surrogate_fd_mutex[0] );
+       ldap_pvt_thread_mutex_init( &shell_surrogate_fd_mutex[1] );
+#endif
+
+       return 0;
+}
+
+int
+shell_back_destroy(
+       BackendInfo *bi
+)
+{
+#ifdef SHELL_SURROGATE_PARENT
+       ldap_pvt_thread_mutex_destroy( &shell_surrogate_index_mutex );
+       ldap_pvt_thread_mutex_destroy( &shell_surrogate_fd_mutex[0] );
+       ldap_pvt_thread_mutex_destroy( &shell_surrogate_fd_mutex[1] );
+       if ( shell_surrogate_fd[0] >= 0 ) {
+               close( shell_surrogate_fd[0] );
+               close( shell_surrogate_fd[1] );
+       }
+       if ( shell_surrogate_pid >= 0 )
+               kill( shell_surrogate_pid, SIGTERM );
+#endif
+
        return 0;
 }
 
@@ -75,6 +101,11 @@ shell_back_db_init(
 {
        struct shellinfo        *si;
 
+#ifdef SHELL_SURROGATE_PARENT
+       if ( shell_surrogate_fd[0] < 0 )
+               make_surrogate_parent();
+#endif
+
        si = (struct shellinfo *) ch_calloc( 1, sizeof(struct shellinfo) );
 
        be->be_private = si;