@@ -81,11 +81,8 @@ typedef struct redis_pool_member_ {
8181 int weight ;
8282 int database ;
8383
84- char * prefix ;
85- size_t prefix_len ;
86-
87- char * auth ;
88- size_t auth_len ;
84+ zend_string * auth ;
85+ zend_string * prefix ;
8986
9087 struct redis_pool_member_ * next ;
9188
@@ -97,34 +94,22 @@ typedef struct {
9794 int count ;
9895
9996 redis_pool_member * head ;
100- redis_session_lock_status * lock_status ;
97+ redis_session_lock_status lock_status ;
10198
10299} redis_pool ;
103100
104- PHP_REDIS_API redis_pool *
105- redis_pool_new (TSRMLS_D ) {
106- redis_pool * pool ;
107-
108- pool = ecalloc (1 , sizeof (* pool ));
109- pool -> lock_status = ecalloc (1 , sizeof (* pool -> lock_status ));
110-
111- return pool ;
112- }
113101
114102PHP_REDIS_API void
115103redis_pool_add (redis_pool * pool , RedisSock * redis_sock , int weight ,
116- int database , char * prefix , char * auth TSRMLS_DC ) {
104+ int database , zend_string * prefix , zend_string * auth TSRMLS_DC ) {
117105
118106 redis_pool_member * rpm = ecalloc (1 , sizeof (redis_pool_member ));
119107 rpm -> redis_sock = redis_sock ;
120108 rpm -> weight = weight ;
121109 rpm -> database = database ;
122110
123111 rpm -> prefix = prefix ;
124- rpm -> prefix_len = (prefix ?strlen (prefix ):0 );
125-
126112 rpm -> auth = auth ;
127- rpm -> auth_len = (auth ?strlen (auth ):0 );
128113
129114 rpm -> next = pool -> head ;
130115 pool -> head = rpm ;
@@ -141,22 +126,21 @@ redis_pool_free(redis_pool *pool TSRMLS_DC) {
141126 next = rpm -> next ;
142127 redis_sock_disconnect (rpm -> redis_sock TSRMLS_CC );
143128 redis_free_socket (rpm -> redis_sock );
144- if (rpm -> prefix ) efree (rpm -> prefix );
145- if (rpm -> auth ) efree (rpm -> auth );
129+ if (rpm -> prefix ) zend_string_release (rpm -> prefix );
130+ if (rpm -> auth ) zend_string_release (rpm -> auth );
146131 efree (rpm );
147132 rpm = next ;
148133 }
149134
150135 /* Cleanup after our lock */
151- if (pool -> lock_status -> session_key )
152- efree (pool -> lock_status -> session_key );
153- if (pool -> lock_status -> lock_secret )
154- efree (pool -> lock_status -> lock_secret );
155- if (pool -> lock_status -> lock_key )
156- efree (pool -> lock_status -> lock_key );
157-
158- /* Cleanup lock status struct and pool itself */
159- efree (pool -> lock_status );
136+ if (pool -> lock_status .session_key )
137+ efree (pool -> lock_status .session_key );
138+ if (pool -> lock_status .lock_secret )
139+ efree (pool -> lock_status .lock_secret );
140+ if (pool -> lock_status .lock_key )
141+ efree (pool -> lock_status .lock_key );
142+
143+ /* Cleanup pool itself */
160144 efree (pool );
161145}
162146
@@ -183,11 +167,11 @@ redis_pool_member_auth(redis_pool_member *rpm TSRMLS_DC) {
183167 int response_len , cmd_len ;
184168
185169 /* Short circuit if we don't have a password */
186- if (!rpm -> auth || ! rpm -> auth_len ) {
170+ if (!rpm -> auth ) {
187171 return ;
188172 }
189173
190- cmd_len = REDIS_SPPRINTF (& cmd , "AUTH" , "s " , rpm -> auth , rpm -> auth_len );
174+ cmd_len = REDIS_SPPRINTF (& cmd , "AUTH" , "S " , rpm -> auth );
191175 if (redis_sock_write (redis_sock , cmd , cmd_len TSRMLS_CC ) >= 0 ) {
192176 if ((response = redis_sock_read (redis_sock , & response_len TSRMLS_CC ))) {
193177 efree (response );
@@ -223,7 +207,7 @@ redis_pool_get_sock(redis_pool *pool, const char *key TSRMLS_DC) {
223207 for (i = 0 ; i < pool -> totalWeight ;) {
224208 if (pos >= i && pos < i + rpm -> weight ) {
225209 int needs_auth = 0 ;
226- if (rpm -> auth && rpm -> auth_len && rpm -> redis_sock -> status != REDIS_SOCK_STATUS_CONNECTED ) {
210+ if (rpm -> auth && rpm -> redis_sock -> status != REDIS_SOCK_STATUS_CONNECTED ) {
227211 needs_auth = 1 ;
228212 }
229213 redis_sock_server_open (rpm -> redis_sock TSRMLS_CC );
@@ -427,7 +411,7 @@ PS_OPEN_FUNC(redis)
427411 zval params , * param ;
428412 int i , j , path_len ;
429413
430- redis_pool * pool = redis_pool_new ( TSRMLS_C );
414+ redis_pool * pool = ecalloc ( 1 , sizeof ( * pool ) );
431415
432416 for (i = 0 ,j = 0 ,path_len = strlen (save_path ); i < path_len ; i = j + 1 ) {
433417 /* find beginning of url */
@@ -444,8 +428,9 @@ PS_OPEN_FUNC(redis)
444428 double timeout = 86400.0 , read_timeout = 0.0 ;
445429 int persistent = 0 ;
446430 int database = -1 ;
447- char * prefix = NULL , * auth = NULL , * persistent_id = NULL ;
431+ char * persistent_id = NULL ;
448432 long retry_interval = 0 ;
433+ zend_string * prefix = NULL , * auth = NULL ;
449434
450435 /* translate unix: into file: */
451436 if (!strncmp (save_path + i , "unix:" , sizeof ("unix:" )- 1 )) {
@@ -491,10 +476,10 @@ PS_OPEN_FUNC(redis)
491476 persistent_id = estrndup (Z_STRVAL_P (param ), Z_STRLEN_P (param ));
492477 }
493478 if ((param = zend_hash_str_find (Z_ARRVAL (params ), "prefix" , sizeof ("prefix" ) - 1 )) != NULL ) {
494- prefix = estrndup ( Z_STRVAL_P ( param ), Z_STRLEN_P ( param ) );
479+ prefix = zval_get_string ( param );
495480 }
496481 if ((param = zend_hash_str_find (Z_ARRVAL (params ), "auth" , sizeof ("auth" ) - 1 )) != NULL ) {
497- auth = estrndup ( Z_STRVAL_P ( param ), Z_STRLEN_P ( param ) );
482+ auth = zval_get_string ( param );
498483 }
499484 if ((param = zend_hash_str_find (Z_ARRVAL (params ), "database" , sizeof ("database" ) - 1 )) != NULL ) {
500485 database = zval_get_long (param );
@@ -509,8 +494,8 @@ PS_OPEN_FUNC(redis)
509494 if ((url -> path == NULL && url -> host == NULL ) || weight <= 0 || timeout <= 0 ) {
510495 php_url_free (url );
511496 if (persistent_id ) efree (persistent_id );
512- if (prefix ) efree (prefix );
513- if (auth ) efree (auth );
497+ if (prefix ) zend_string_release (prefix );
498+ if (auth ) zend_string_release (auth );
514499 redis_pool_free (pool TSRMLS_CC );
515500 PS_SET_MOD_DATA (NULL );
516501 return FAILURE ;
@@ -544,11 +529,11 @@ PS_CLOSE_FUNC(redis)
544529 redis_pool * pool = PS_GET_MOD_DATA ();
545530
546531 if (pool ){
547- redis_pool_member * rpm = redis_pool_get_sock (pool , pool -> lock_status -> session_key TSRMLS_CC );
532+ redis_pool_member * rpm = redis_pool_get_sock (pool , pool -> lock_status . session_key TSRMLS_CC );
548533
549534 RedisSock * redis_sock = rpm ? rpm -> redis_sock : NULL ;
550535 if (redis_sock ) {
551- lock_release (redis_sock , pool -> lock_status TSRMLS_CC );
536+ lock_release (redis_sock , & pool -> lock_status TSRMLS_CC );
552537 }
553538
554539 redis_pool_free (pool TSRMLS_CC );
@@ -567,9 +552,9 @@ redis_session_key(redis_pool_member *rpm, const char *key, int key_len, int *ses
567552 char * prefix = default_prefix ;
568553 size_t prefix_len = sizeof (default_prefix )- 1 ;
569554
570- if (rpm -> prefix ) {
571- prefix = rpm -> prefix ;
572- prefix_len = rpm -> prefix_len ;
555+ if (rpm -> prefix ) {
556+ prefix = ZSTR_VAL ( rpm -> prefix ) ;
557+ prefix_len = ZSTR_LEN ( rpm -> prefix ) ;
573558 }
574559
575560 /* build session key */
@@ -605,12 +590,12 @@ PS_READ_FUNC(redis)
605590#else
606591 resp = redis_session_key (rpm , ZSTR_VAL (key ), ZSTR_LEN (key ), & resp_len );
607592#endif
608- pool -> lock_status -> session_key = estrndup (resp , resp_len );
593+ pool -> lock_status . session_key = estrndup (resp , resp_len );
609594
610595 cmd_len = REDIS_SPPRINTF (& cmd , "GET" , "s" , resp , resp_len );
611596 efree (resp );
612597
613- if (lock_acquire (redis_sock , pool -> lock_status TSRMLS_CC ) != SUCCESS ) {
598+ if (lock_acquire (redis_sock , & pool -> lock_status TSRMLS_CC ) != SUCCESS ) {
614599 php_error_docref (NULL TSRMLS_CC , E_NOTICE ,
615600 "Acquire of session lock was not successful" );
616601 }
@@ -679,7 +664,7 @@ PS_WRITE_FUNC(redis)
679664#endif
680665 efree (session );
681666
682- if (!write_allowed (redis_sock , pool -> lock_status TSRMLS_CC ) || redis_sock_write (redis_sock , cmd , cmd_len TSRMLS_CC ) < 0 ) {
667+ if (!write_allowed (redis_sock , & pool -> lock_status TSRMLS_CC ) || redis_sock_write (redis_sock , cmd , cmd_len TSRMLS_CC ) < 0 ) {
683668 efree (cmd );
684669 return FAILURE ;
685670 }
@@ -720,7 +705,7 @@ PS_DESTROY_FUNC(redis)
720705
721706 /* Release lock */
722707 if (redis_sock ) {
723- lock_release (redis_sock , pool -> lock_status TSRMLS_CC );
708+ lock_release (redis_sock , & pool -> lock_status TSRMLS_CC );
724709 }
725710
726711 /* send DEL command */
0 commit comments