 +					item->key, item->keylen);
 +			/* drop exp has no reply. */
 +			glq_recycle_req (item);
++		} else if (item->type == glq_req_type_expire) {
++			err = lg_lock_expire (gulm_cm.hookup, item->lvb,
++					item->key, item->keylen);
++			/* expire has no reply. */
++			glq_recycle_req (item);
 +		} else if (item->type == glq_req_type_cancel) {
 +			err = lg_lock_cancel_req (gulm_cm.hookup, item->key,
 +					item->keylen, item->subid);

+#define glq_req_type_drop   (3)
+#define glq_req_type_cancel (4)
+#define glq_req_type_query  (5)
+typedef struct glck_req {
+	struct list_head list;
+

+			/* found it. */
+			list_del (tmp);
+			found = TRUE;
+			break;
+		}
+	}
+	spin_unlock(&glq_OutLock);
+
+	if (!found) {
+		/* send cancel request to server. */
+		cancel->type = glq_req_type_cancel;
+		glq_queue (cancel);
+	}else{
+		/* finish it here */
+		item->error = lg_err_Canceled;
+		if (item->finish != NULL )
+			item->finish (item);
+		glq_recycle_req (item);
+		glq_recycle_req (cancel);
+	}
+}
+
