- register client *cp = (client *)p_cp;
- /*
- * This takes too much advantage of the fact that
- * serialization of the data happens during the queue operation.
- */
- mr_params *arg_tmp = (mr_params *)db_alloc(sizeof(mr_params));
- returned_tuples *tp = (returned_tuples *)
- db_alloc(sizeof(returned_tuples));
- register char **nargv = (char **)malloc(argc * sizeof(char *));
- register int i;
-
- OPERATION op_tmp = create_operation();
-
- if (mr_trim_args(argc, argv) == MR_NO_MEM) {
- com_err(whoami, MR_NO_MEM, "while trimming args");
- }
- if (log_flags & LOG_RESP)
- log_args("return: ", cp->args->mr_version_no, argc, argv);
-
- tp->op = op_tmp;
- tp->retval = arg_tmp;
- tp->next = NULL;
-
- arg_tmp->mr_status = MR_MORE_DATA;
- arg_tmp->mr_version_no = cp->args->mr_version_no;
- arg_tmp->mr_argc = argc;
- arg_tmp->mr_argv = nargv;
- for (i = 0; i < argc; i++) {
- register int len = strlen(argv[i]) + 1;
- nargv[i] = malloc(len);
- bcopy(argv[i], nargv[i], len);
- }
- arg_tmp->mr_flattened = (char *)NULL;
- arg_tmp->mr_argl = (int *)NULL;
-
- if (cp->last) {
- cp->last->next = tp;
- cp->last = tp;
- } else {
- cp->last = cp->first = tp;
- }
-
- reset_operation(op_tmp);
- initialize_operation(op_tmp, mr_start_send, (char *)arg_tmp,
- (int (*)())NULL);
- queue_operation(cp->con, CON_OUTPUT, op_tmp);
+ client *cp = (client *)p_cp;
+ mr_params *arg_tmp;
+ returned_tuples *tp;
+ OPERATION op_tmp;
+ char **nargv;
+ int i;
+
+ if (row_count++ >= max_row_count)
+ {
+ dbms_errno = mr_errcode = MR_NO_MEM;
+ return;
+ }
+
+ /*
+ * This takes too much advantage of the fact that
+ * serialization of the data happens during the queue operation.
+ */
+ arg_tmp = db_alloc(sizeof(mr_params));
+ tp = db_alloc(sizeof(returned_tuples));
+ nargv = malloc(argc * sizeof(char *));
+
+ op_tmp = create_operation();
+
+ if (mr_trim_args(argc, argv) == MR_NO_MEM)
+ com_err(whoami, MR_NO_MEM, "while trimming args");
+ if (log_flags & LOG_RESP)
+ log_args("return: ", cp->args->mr_version_no, argc, argv);
+
+ tp->op = op_tmp;
+ tp->retval = arg_tmp;
+ tp->next = NULL;
+
+ arg_tmp->mr_status = MR_MORE_DATA;
+ arg_tmp->mr_version_no = cp->args->mr_version_no;
+ arg_tmp->mr_argc = argc;
+ arg_tmp->mr_argv = nargv;
+ for (i = 0; i < argc; i++)
+ {
+ int len = strlen(argv[i]) + 1;
+ nargv[i] = malloc(len);
+ memcpy(nargv[i], argv[i], len);
+ }
+ arg_tmp->mr_flattened = NULL;
+ arg_tmp->mr_argl = NULL;
+
+ if (cp->last)
+ {
+ cp->last->next = tp;
+ cp->last = tp;
+ } else
+ cp->last = cp->first = tp;
+
+ reset_operation(op_tmp);
+ initialize_operation(op_tmp, mr_start_send, (char *)arg_tmp, NULL);
+ queue_operation(cp->con, CON_OUTPUT, op_tmp);