[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
(ITS#8183) ldap_init() failed at sub thread but runs ok at main.
- To: openldap-its@OpenLDAP.org
- Subject: (ITS#8183) ldap_init() failed at sub thread but runs ok at main.
- From: 1727647302@qq.com
- Date: Thu, 02 Jul 2015 06:14:04 +0000
- Auto-submitted: auto-generated (OpenLDAP-ITS)
Full_Name: wondersoft
Version: 2.4.39
OS: CentOS 6.6 X86_64
URL: ftp://ftp.openldap.org/incoming/
Submission from: (NULL) (182.50.119.36)
Hi:
My server is CentOS 6.6(x86_64). When I create a thread on the main(), it's
failed on ldap_init(), but it's ok at main not running on a sub thread. But
using the same version and the same code, it runs pretty well at CentOS
6.6(x86_32).
Test code is here:
void pthread_ldap()
{
LDAP *ld = NULL;
ld=(LDAP*)ldap_init(HOSTNAME,0);
if(ld ==NULL) {
perror("ldap_init");
return ;
}
int protocolVersion = LDAP_VERSION3;
//It failed here, if ituns s on CentOS 6.6(x86_64) as a sub thread.
ldap_set_option( ld, LDAP_OPT_PROTOCOL_VERSION, &(protocolVersion));
return ;
}
int main()
{
int ret = 0;
pthread_attr_t attr_attribute;
pthread_attr_init(&attr_attribute);
pthread_attr_setdetachstate(&attr_attribute,PTHREAD_CREATE_DETACHED);
pthread_t pid;
//If no sub thread created, it's ok
//pthread_ldap();
if( pthread_create( &pid, &attr_attribute, (void*)pthread_ldap, NULL ) ) {
perror(" Create pthread_ldap ERROR");
}
}
gdb chasing result:
(gdb)
222 rc = ldap_set_option(ld, LDAP_OPT_HOST_NAME, defhost);
(gdb)
223 if ( rc != LDAP_SUCCESS ) {
(gdb) p ld
$6 = (LDAP *) 0x7ffff00008c0
(gdb)
pthread_ldap () at OPENLDAP_exam.c8686
186 printf("ldap_init ld = %d\n", ld);
(gdb) p ld
$7 = (LDAP *) 0xfffffffff00008c0
gcc version:
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-11)
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
OS version:
Linux localhost.localdomain 2.6.32-504.el6.x86_64 #1 SMP Wed Oct 15 04:27:16 UTC
2014 x86_64 x86_64 x86_64 GNU/Linux
gcc command:
gcc OPENLDAP_exam.c -g -o OPENLDAP_exam -L/usr/local/lib -lldap -llber -lpthread