Skip to content

MySQL memory leak #73

@simon639

Description

@simon639
(let* ((pq (dbi:prepare conn "SELECT * FROM visit"))
	 (query (dbi:execute pq nil)))
	   (dbi:fetch-all query))

above code run in hunchentoot will lead to memory leak in MySQL

https://blog.actorsfit.in/a?ID=01800-28830ddf-a436-4fff-b97d-d952487c8948

the result set of mysql_store_result(), mysql_use_result(), and mysql_list_dbs() must call mysql_free_result() to release the memory used by the result set after completing the operation on the result set.

(defmethod execute-using-connection ((conn dbd-mysql-connection) (query dbd-mysql-query) params)
  (let* (took-usec
         (result
           (with-error-handler conn
             (with-took-usec took-usec
               (query (funcall (query-prepared query) params)
                      :database (connection-handle conn)
                      :store nil)))))
    (return-or-close (owner-pool result) result)
    (next-result-set result)
    (cond
      ((mysql-use-store query)
       (multiple-value-bind (rows count)
           (fetch-all-rows result)
		 **(cl-mysql-system::mysql-free-result (cl-mysql-system::result-set result))**
		 (sql-log (query-sql query) params count took-usec)
		 (setf result (make-mysql-result-list rows count))
		 (setf (query-row-count query) count)))
      (t
       (sql-log (query-sql query) params nil took-usec)))
	(setf (query-results query) result)
	query))

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions