- Z_ADDREF_P(getThis());
- args[0] = &getThis();
- if (request) {
- Z_ADDREF_P(request);
- }
- args[1] = &request;
- if (zprogress) {
- Z_ADDREF_P(zprogress);
- }
- args[2] = &zprogress;
- spl_iterator_apply(observers, notify, args TSRMLS_CC);
- zval_ptr_dtor(&getThis());
- if (request) {
- zval_ptr_dtor(&request);
- }
- if (zprogress) {
- zval_ptr_dtor(&zprogress);
+ if (client_obj->update) {
+ arg.cb = client_obj->update;
+
+ Z_ADDREF_P(getThis());
+ arg.args[0] = &getThis();
+ arg.argc = 1;
+
+ if (request) {
+ Z_ADDREF_P(request);
+ arg.args[1] = &request;
+ arg.argc += 1;
+ }
+
+ if (zprogress) {
+ Z_ADDREF_P(zprogress);
+ arg.args[2] = &zprogress;
+ arg.argc += 1;
+ }
+
+ spl_iterator_apply(observers, notify, &arg TSRMLS_CC);
+
+ zval_ptr_dtor(&getThis());
+ if (request) {
+ zval_ptr_dtor(&request);
+ }
+ if (zprogress) {
+ zval_ptr_dtor(&zprogress);
+ }