[Date Prev][Date Next] [Chronological] [Thread] [Top]

(ITS#2774



This is a multi-part message in MIME format.

------=_NextPart_000_001A_01C3AF47.1010EF70
Content-Type: multipart/alternative;
	boundary="----=_NextPart_001_001B_01C3AF47.1010EF70"


------=_NextPart_001_001B_01C3AF47.1010EF70
Content-Type: text/plain;
	charset="us-ascii"
Content-Transfer-Encoding: 7bit

FYI - this patch seemed to sort my problem out. I don't know why
ldap_pvt_thread_cond_wait() wasn't waking up when the thread was
signaled. Maybe a bug in pthreads? (I was using v10 as included with
RedHat9). This could be extended to timeout idle threads but I didn't
have time to add that functionality.

 

--- libraries/libldap_r/tpool.c.orig    2003-10-27 19:52:44.000000000
-0500

+++ libraries/libldap_r/tpool.c 2003-10-27 19:56:53.000000000 -0500

@@ -408,8 +408,21 @@

                         *       check timer, leave thread (break;)

                         */

 

-                       if (pool->ltp_state ==
LDAP_INT_THREAD_POOL_RUNNING)

-
ldap_pvt_thread_cond_wait(&pool->ltp_cond, &pool->ltp_mutex);

+                       if (pool->ltp_state ==
LDAP_INT_THREAD_POOL_RUNNING) {

+
//ldap_pvt_thread_cond_wait(&pool->ltp_cond, &pool->ltp_mutex);

+                               struct timespec to;

+                               memset(&to, 0, sizeof to);

+                               to.tv_sec = time(0) + 60;

+                               to.tv_nsec = 0;

+                               // syslog( ldap_syslog_level, "thread %d
waiting for signal\n", ldap_pvt_thread_self());

+                               int rc =
pthread_cond_timedwait(&pool->ltp_cond, &pool->ltp_mutex, &to);

+                               // Should be able to let this idle
thread die. TODO: Fix bug that makes slapd crash if we do this

+                               // if( (rc == ETIMEDOUT) &&
(pool->ltp_open_count > 1) && (pool->ltp_starting == 0) ) {

+                                       // syslog( ldap_syslog_level,
"thread %d timed out due to inactivity\n", ldap_pvt_thread_self());

+                                       // break;

+                               // }

+                               // syslog( ldap_syslog_level, "thread %d
got signal %d\n", ldap_pvt_thread_self(), rc);

+                       }

 

                        continue;

                }

 

 



John Matthews

CROSSML

Phone: 1300 305 110

 


------=_NextPart_001_001B_01C3AF47.1010EF70
Content-Type: text/html;
	charset="us-ascii"
Content-Transfer-Encoding: quoted-printable

FYI - this patch seemed to sort my problem out. I = don?t know why ldap_pvt_thread_cond_wait() wasn?t waking up when the = thread was signaled. Maybe a bug in pthreads? (I was using v10 as included with = RedHat9). This could be extended to timeout idle threads but I didn?t have = time to add that functionality.

 

--- = libraries/libldap_r/tpool.c.orig    2003-10-27 19:52:44.000000000 -0500

+++ libraries/libldap_r/tpool.c 2003-10-27 19:56:53.000000000 -0500

@@ -408,8 +408,21 @@

         =             &=
nbsp;   *       check timer, leave thread = (break;)

         =                 */

 

-         = ;            =   if (pool->ltp_state =3D=3D = LDAP_INT_THREAD_POOL_RUNNING)

-         = ;            =           ldap_pvt_thread_cond_wait(&pool->ltp_cond, = &pool->ltp_mutex);

+         = ;            =   if (pool->ltp_state =3D=3D LDAP_INT_THREAD_POOL_RUNNING) = {

+         = ;            =           //ldap_pvt_thread_cond_wait(&pool->ltp_cond, = &pool->ltp_mutex);

+         = ;            =           struct timespec to;

+         = ;            =           memset(&to, 0, sizeof to);

+         = ;            =           to.tv_sec =3D time(0) + 60;

+         = ;            =           to.tv_nsec =3D 0;

+         = ;            =           // syslog( ldap_syslog_level, "thread %d waiting for = signal\n", ldap_pvt_thread_self());

+         = ;            =           int rc =3D pthread_cond_timedwait(&pool->ltp_cond, = &pool->ltp_mutex, &to);

+         = ;            =           // Should be able to let this idle thread die. TODO: Fix bug that makes = slapd crash if we do this

+         = ;                      /= / if( (rc =3D=3D ETIMEDOUT) && (pool->ltp_open_count > 1) = && (pool->ltp_starting =3D=3D 0) ) {

+         = ;            =             &=
nbsp;     // syslog( ldap_syslog_level, "thread %d timed out due to inactivity\n", ldap_pvt_thread_self());

+         = ;                    &=
nbsp;         // break;

+         = ;            =           // }

+         = ;            =           // syslog( ldap_syslog_level, "thread %d got signal %d\n", = ldap_pvt_thread_self(), rc);

+         = ;            =   }

 

         =             &=
nbsp;  continue;

      =           }

 

 

John Matthews

CROSSML

Phone: 1300 305 110

 

------=_NextPart_001_001B_01C3AF47.1010EF70--

------=_NextPart_000_001A_01C3AF47.1010EF70
Content-Type: image/gif;
	name="image001.gif"
Content-Transfer-Encoding: base64
Content-ID: <image001.gif@01C3AF47.0F94E1A0>

R0lGODlhcAAlAHcAACH/C01TT0ZGSUNFOS4wDQAAAAFzUkdCAK7OHOkAIf8LTVNPRkZJQ0U5LjAY
AAAADG1zT1BNU09GRklDRTkuMNngmL/KACwAAAAAcAAlAIcAAAAUFBQaGhoLCwsKCgoMDAwbGxsX
FxcVFRUcHBwICAgREREDAwMFBQUEBAQPDw8fHx8BAQEZGRkqKioiIiI0NDQ/Pz84ODghISEkJCQo
KCgrKys7OzsgICAnJyclJSUpKSkmJiY1NTU3Nzc9PT05OTktLS0yMjJZWVlPT09fX19eXl5aWlpW
VlZOTk5HR0dQUFBGRkZMTExLS0tSUlJISEhNTU1RUVFbW1tdXV1UVFRJSUlYWFhTU1NBQUFVVVVc
XFxDQ0NERERXV1dAQEBFRUV4eHhgYGBmZmZvb29ubm52dnZwcHB7e3tsbGxpaWlycnJoaGhiYmJ0
dHRra2thYWFjY2Nzc3Nqamp8fHxxcXF/f39tbW19fX15eXllZWVnZ2d6enp+fn5kZGR1dXV3d3ee
np6RkZGMjIyBgYGEhISCgoKOjo6AgICKioqDg4OHh4eUlJSWlpaIiIiQkJCLi4ubm5ucnJyFhYWG
hoaJiYmfn5+Tk5OZmZmampqdnZ2Pj4+VlZWSkpKYmJirq6u4uLi7u7u9vb2lpaWioqK/v7+kpKSs
rKygoKC3t7e1tbWxsbGzs7O5ubmjo6O6urqtra2wsLCnp6e+vr68vLympqaysrKpqam2travr6+u
rq6hoaHb29vd3d3W1tbFxcXMzMzIyMjJycnLy8vf39/Y2NjS0tLDw8PR0dHPz8/Hx8fX19fU1NTB
wcHExMTa2trNzc3e3t7Z2dnT09PQ0NDAwMDCwsLKysry8vL39/fr6+vg4ODi4uLv7+/j4+P09PTo
6Oj5+fnx8fHw8PD8/Pzz8/P7+/vl5eX19fXs7Ozm5ubh4eH4+Pj29vbn5+f9/f3p6enu7u7t7e3/
//8BAgMBAgMBAgMBAgMBAgMBAgMBAgMBAgMBAgMBAgMBAgMBAgMBAgMBAgMBAgMBAgMBAgMBAgMB
AgMBAgMBAgMBAgMBAgMBAgMBAgMBAgMBAgMBAgMBAgMBAgMBAgMBAgMBAgMBAgMBAgMBAgMBAgMB
AgMBAgMI/wCxCRxIsKDBgwMJmZmAsKHDhxAjSpxIEVuhMxQqatzIsaPEANiMGPIIsdchkihTggyF
ImVDAGhcytxYKI2oIxzVPByVAhsSXw4RoVBBVMUKUjNTJjrj81fFUiwgtgCGzQVVhC9MFVSUJGnK
CtiUIJ24JMCph2sWCYQR7CCqGAhlpPJKkhEbJqokCpsxLKpDRUgGssXWhmCTRg0VLaFL0gkwARIB
YHviyKGwFcQEY4PyaCCkJw5NRYnEeCKjYgSNOZEMcQA2uA9F0SB4xIKLgVIkDey1mqAUAqtqlI54
rAWygqymgBVI5YLBKkvcRGQ90IqTgZPeEARwhaBrFoZsDP8/mOwGDoFWWB1MA1eZEuoDASwZFhFD
QSwFMmNL1WJgKyRZuCLYMla8go0ahIw3EDM3aCGQAaTA0VAGqGCQw3EDNWPFFAlCdMMoBMVhhhVt
YdMCLAK94QQVcgy0BSWVzCHQFqQpiIZ2A1ECn0GWAMAGKgRdwgUWxkRER4sDHTAJNoPVYQd6UzBC
kBWxSOGXG13IomAMohR0h5QHUXIDJjdoQFAoUGChJUSt6LDdDms5E4sS2GQCgBfdDWTEFF8IBAYA
z2CDADYyJMPYjgJpEpNBOWyCDTRbACAdNnhs8oJE0WxAEBZ5jIQNC9IkwAMAChS0DAAozMKkmypk
xgEAc3n/pQxsBi1gEDC0tjANLB00skUsXABARRRFIUELNlVggQ0nXmADHwMeuMCFClF8AEAcb6jB
2hJWhAEAfbW46axAcwDQCV13TIFQAwblocdAdXAi0BMAZGGAQEoIKNASAPTQRraS+RAoNr04AMAq
BH2xhRZgCHTEDdjY0h82t/ggkK0C7YFoSjHoa9AalxIUQ4kCPdDLDy2o0ogYWQhUShJ8gBCCGQKl
kYKPUYAo0AQZGNRbQUsghs0kTAjkZIoibEyS0ticistAnuBUkBt9DAQHF02EgZMSuYyAjTA6fCEG
nZ88kUQSaQDgKUGHlFpQDLEIlJVAeDyJzSNi6LGmTFes/20QAOoKpEMmDxGSBjZ+AKBGFhAAgU0d
eGATDQ/Y/PEHNrpAQQIMX5RCEBuRF9TCLgJRt0tg2EjjAjWyltBQEEsACQMMAmkBhAr06lCFE2NU
g00tRlgRDTaECFGHJlVYU/obKgBAxhC8OCsNNqCgoIMyKDhF0C20xqA9NlF4Pi5dTBcCSARM+NWQ
HvwCAAATaSgrEBRZeDEGUVoUQtApiHbhxA8E2QJijgCEPvmmFDygHV2I8L2/cUQMXPCC+6DQBi/s
rSDQuE1DWqCCMXBhMgo8SGEYw4rrIIRpFWGCEshgAvdBAAkrQJ1ErtEAAHhCQSdsSAxQMxw04MAK
JSAAGO5UgAQ/POQWPxgCJXA4kAcg5BArYKJBAoGEYLlvCmergkFYAYYkiGs4gricQZThAqBI0SGj
+EISuuA+952ADGXYgrqWsIQkWOEYdJHAQdJ1Ro4wwmxJ8BYASpAHMXRlJqyYWEFu4LE+GqQaN6DC
REhhhC0Y8mxYO4gH5JODDzokFUU4yBsG4ciHwOF2KpACDdqIhaIUJQpni2UStICENgJgCO5bBB3i
MJ2DxGBgpRyOFrZAzCm0gY0niIgJDEWQTYwhmNCMiCG2UBBJWCGa2HSIBwiCixtIKJvgNMhyDHED
u4XznAMhwSGq4Dd0ojMgADs=

------=_NextPart_000_001A_01C3AF47.1010EF70--