MariaDB supports metadata locking. This means that when a transaction
(including XA transactions) uses a table, it locks its metadata until the end
of transaction. Non-transactional tables are also locked, as well as views and
objects which are related to locked tables/views (stored functions, triggers,
etc). When a connection tries to use a DDL statement (like an ALTER TABLE)
which modifies a table that is locked, that connection is queued, and has to
wait until it's unlocked. Using savepoints and performing a partial rollback
does not release metadata locks.

error may not need to wait for the lock to be freed.

The metadata lock's timeout is determined by the value of the
lock_wait_timeout server system variable (in seconds). However, note that its
default value is 31536000 (1 year, MariaDB <= 10.2.3), or 86400 (1 day,
MariaDB >= 10.2.4). If this timeout is exceeded, the following error is
returned:

ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

If the metadata_lock_info plugin is installed, the Information Schema
metadata_lock_info table stores information about existing metadata locks.

MariaDB starting with 10.5.2
----------------------------
From MariaDB 10.5, the Performance Schema metadata_locks table contains
metadata lock information.

Example
-------

Let's use the following MEMORY (non-transactional) table:

CREATE TABLE t (a INT) ENGINE = MEMORY;

Connection 1 starts a transaction, and INSERTs a row into t:

START TRANSACTION;

INSERT INTO t SET a=1;

t's metadata is now locked by connection 1. Connection 2 tries to alter t, but
has to wait:

ALTER TABLE t ADD COLUMN b INT;

Connection 2's prompt is blocked now.

Now connection 1 ends the transaction:

COMMIT;

...and connection 2 finally gets the output of its command:

Query OK, 1 row affected (35.23 sec)
Records: 1  Duplicates: 0  Warnings: 0

URL: https://mariadb.com/kb/en/metadata-locking/