8000 Small fixes for PUB/SUB. · DQPHP/phpredis@91256df · GitHub
[go: up one dir, main page]

Skip to content

Commit 91256df

Browse files
committed
Small fixes for PUB/SUB.
1 parent c6c0021 commit 91256df

File tree

1 file changed

10000 +15
-51
lines changed

1 file changed

+15
-51
lines changed

redis.c

Lines changed: 15 additions & 51 deletions
< 10000 td data-grid-cell-id="diff-a1471159ac00556a439382b010c89a8507ebc6f03311ec7655cebd95dc6c978e-3856-3855-2" data-line-anchor="diff-a1471159ac00556a439382b010c89a8507ebc6f03311ec7655cebd95dc6c978eR3855" data-selected="false" role="gridcell" style="background-color:var(--bgColor-default);padding-right:24px" tabindex="-1" valign="top" class="focusable-grid-cell diff-text-cell right-side-diff-cell left-side">
}
Original file line numberDiff line numberDiff line change
@@ -3775,8 +3775,8 @@ PHP_METHOD(Redis, subscribe)
37753775
int cmd_len, array_count, callback_ft_name_len;
37763776

37773777

3778-
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oasz",
3779-
&object, redis_ce, &array, &callback_ft_name, &callback_ft_name_len, &z_callback) == FAILURE) {
3778+
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oaz|z",
3779+
&object, redis_ce, &array, &z_callback) == FAILURE) {
37803780
RETURN_FALSE;
37813781
}
37823782

@@ -3840,33 +3840,20 @@ PHP_METHOD(Redis, subscribe)
38403840
char *class_name, *method_name;
38413841
zend_class_entry **class_entry_pp, *ce;
38423842

3843-
MAKE_STD_ZVAL(z_ret);
3844-
38453843
/* verify the callback */
38463844
if(Z_TYPE_P(z_callback) == IS_ARRAY) {
38473845

3846+
/* object */
38483847
if (zend_hash_index_find(Z_ARRVAL_P(z_callback), 0, (void**)&tmp) == FAILURE) {
38493848
RETURN_FALSE;
38503849
}
3850+
z_o = *tmp;
38513851

3852-
class_name = Z_STRVAL_PP(tmp);
3853-
3852+
/* method name */
38543853
if (zend_hash_index_find(Z_ARRVAL_P(z_callback), 1, (void**)&tmp) == FAILURE) {
38553854
RETURN_FALSE;
38563855
3857-
38583856
method_name = Z_STRVAL_PP(tmp);
3859-
if(zend_lookup_class(class_name, strlen(class_name), &class_entry_pp TSRMLS_CC) == FAILURE) {
3860-
/* The class didn't exist */
3861-
/* generate error */
3862-
RETURN_FALSE;
3863-
}
3864-
3865-
3866-
ce = *class_entry_pp;
3867-
// create an empty object.
3868-
MAKE_STD_ZVAL(z_o);
3869-
object_init_ex(z_o, ce);
38703857

38713858
ALLOC_INIT_ZVAL(z_fun);
38723859
ZVAL_STRING(z_fun, method_name, 1);
@@ -3897,59 +3884,36 @@ PHP_METHOD(Redis, subscribe)
38973884
}
38983885
if (zend_hash_index_find(Z_ARRVAL_P(z_tab), 2, (void**)&data) == FAILURE) {
38993886
break;
3900-
}
3887+
}
3888+
3889+
if(Z_TYPE_PP(type) == IS_STRING && strncmp(Z_STRVAL_PP(type), "message", 7) != 0) {
3890+
continue; /* only forwarding published messages */
3891+
}
39013892

39023893
z_args[0] = getThis();
39033894
z_args[1] = *channel;
39043895
z_args[2] = *data;
39053896

39063897
switch(callback_type) {
39073898
case R_SUB_CALLBACK_CLASS_TYPE:
3899+
MAKE_STD_ZVAL(z_ret);
39083900
call_user_function(&ce->function_table, &z_o, z_fun, z_ret, 3, z_args TSRMLS_CC);
3909-
//efree(z_o);
3910-
//efree(z_fun);
3911-
//zval_dtor(z_ret); efree(z_ret);
3912-
//free(z_args[0]); free(z_args[1]); free(z_args[2]);
3913-
//free(z_args);
3914-
3901+
efree(z_ret);
39153902
break;
3903+
39163904
case R_SUB_CALLBACK_FT_TYPE:
39173905
MAKE_STD_ZVAL(z_ret);
39183906
MAKE_STD_ZVAL(z_fun);
39193907
ZVAL_STRINGL(z_fun, callback_ft_name, callback_ft_name_len, 0);
39203908
call_user_function(EG(function_table), NULL, z_fun, z_ret, 3, z_args TSRMLS_CC);
39213909
efree(z_fun);
3922-
//free(z_args[0]); free(z_args[1]); free(z_args[2]);
3923-
//free(z_args);
3910+
efree(z_ret);
39243911
break;
39253912
}
3926-
3927-
if(Z_TYPE_P(z_ret) == IS_BOOL) {
3928-
// the callback function return TRUE if we want to continue listening on the channel
3929-
// or FALSE if we need to stop listeneing
3930-
if(!Z_BVAL_P(z_ret)) {
3931-
efree(z_o);
3932-
efree(z_fun);
3933-
zval_dtor(z_tab);
3934-
efree(z_tab);
3935-
zval_dtor(z_ret);
3936-
efree(z_ret);
3937-
break;
3938-
}
3939-
} else {
3940-
//error : the callback must return BOOL reponse
3941-
efree(z_o);
3942-
efree(z_fun);
3943-
zval_dtor(z_tab);
3944-
efree(z_tab);
3945-
zval_dtor(z_ret);
3946-
efree(z_ret);
3947-
RETURN_FALSE;
3948-
}
3913+
/* TODO: provide a way to break out of the loop. */
39493914
zval_dtor(z_tab);
39503915
efree(z_tab);
39513916
}
3952-
/*@TODO : collect all the returned data and return it */
39533917
}
39543918

39553919
/**

0 commit comments

Comments
 (0)
0